python进程、线程

进程:
单个进程:

from multiprocessing import Process
import time


def task(msg):
    print ('hello, %s' % msg)
    time.sleep(1)


if __name__ == '__main__':
    p = Process(target=task, args=('world',))

    p.start()
    if p.is_alive():
        print ('Process: %s is running' % p.pid)
    p.join()

多进程

from multiprocessing import Process
import time


def task(msg):
    print ('hello, %s' % msg)
    time.sleep(1)


if __name__ == '__main__':
    for i in range(5):
        p = Process(target=task, args=('world',))

        p.start()
        if p.is_alive():
            print ('Process: %s is running' % p.pid)
    p.join()

使用进程池,进程在运行时最多不能超过进程池的大小

from multiprocessing import Pool
import os,time
def run_task(name):
    print('task',os.getpid())
    time.sleep(2)
    print('task',os.getpid(),' is end')
if __name__=='__main__':
    p=Pool(processes=3)
    for i in range(5):
        p.apply_async(run_task,args=(str(i),))
    p.close()
    p.join()
    print('all is done')

进程之间的通信:
Queue:多进程之间通信:

from multiprocessing import Process,Queue 
import os,time,random
def proc_write(q,urls):
    print('Process (%s) is writing' % os.getpid())
    for url in urls:
        q.put(url)
        print('put %s to queue' % url)
        time.sleep(random.random())
def proc_read(q):
    print('Process (%s) is reading' % os.getpid())
    while True:
        url=q.get(True)
        print('Get %s from queue' % url)
if __name__=='__main__':
    q=Queue()
    proc_write1=Process(target=proc_write,args=(q,['url_1','url_2','url_3']))
    proc_write2=Process(target=proc_write,args=(q,['url_4','url_5','url_6']))
    proc_reader=Process(target=proc_read,args=(q,))
    proc_write1.start()
    proc_write2.start()
    proc_reader.start()
    proc_write1.join()
    proc_write2.join()
    proc_reader.terminate()

Pipe:管道,两个进程之间的通信,一个send,一个revc

import os,time,random,multiprocessing

def proc_send(pipe,urls):
    for url in urls:
        print('Process (%s) is sending %s.' % (os.getpid(),url))
        pipe.send(url)
        time.sleep(random.random())
def proc_read(pipe):
    while True:
        try:
            msg=pipe.recv()
            print('Process (%s) rev %s.' % (os.getpid(),msg))
        except EOFError:
            break


if __name__=='__main__':
    pipe=multiprocessing.Pipe()
    p1=multiprocessing.Process(target=proc_send,args=(pipe[0],['url_'+str(i) for i in range(10)]))
    p2=multiprocessing.Process(target=proc_read,args=(pipe[1],))
    p1.start()
    p2.start()
    pipe[0].close()
    pipe[1].close()
    p1.join()
    p2.join()

线程:

多线程
import time,threading
def music(name):
    time.sleep(3)
    print ('播放歌曲 %s at %s.' % (name,str(time.time())))
def movie(name):
    time.sleep(3)
    print('播放电影 %s at %s.' % (name,str(time.time())))
threads=[]
t1=threading.Thread(target=music,args=(u'沙漠骆驼',))
threads.append(t1)
t2=threading.Thread(target=movie,args=(u'影',))
threads.append(t2)
if __name__=='__main__':
    for t in threads:
        t.setDaemon(True)
        t.start()
    t.join()
print('time is',time.time())

lock同步

import time,threading
lock=threading.Lock()
v=1000
def b(n):
    lock.acquire()
    try:
        global v
        v+=n
        print(threading.current_thread(),'is running.v:',v)
    finally:
        lock.release()
t1=threading.Thread(target=b,args=(6,))
t2=threading.Thread(target=b,args=(8,))
t3=threading.Thread(target=b,args=(8,))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
print(v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值