进程

#使用multiprocessing模块创建多进程
import os
from multiprocessing import Process
def run_proc(name):
    print('Child process %s (%s) Running...'%(name,os.getpid()))
if __name__ == '__main__':
    print('Parent process %s'%os.getpid())
    for i in range(5):
        p = Process(target=run_proc,args=(str(i),))
        print('Process will start')
        p.start()
    p.join()
    print('Process end')
Parent process 8436
Process will start
Process will start
Process will start
Process will start
Process will start
Process end
#multiprocessing模块提供一个Pool类来代表进程池对象
from multiprocessing import Pool
import os,time,random

def run_task(name):
    print('Task %s(pid = %s)is running...'%(name,os.getpid()))
    time.sleep(random.random()*3)
    print('Task %s end'%name)

if __name__ == "__main__":
    print('Current process %s.'%os.getpid())
    p = Pool(processes=3)
    for i in range(5):
        p.apply_async(run_task,args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')
Current process 8436.
Waiting for all subprocesses done...
# 进程之间的通信
#Queue通信:多线程安全队列
#Get和Put方法
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__':
    #父进程创建Queue,并传给各个子进程
    q = Queue()
    proc_writer1 = Process(target=proc_write,args=(q,['url1','url2','url3']))
    proc_writer2 = Process(target=proc_write,args=(q,['url4','url5','url6']))
    proc_reader = Process(target=proc_read,args=(q,))
    #启动子进程pro_writer,写入:
    proc_writer1.start()
    proc_writer2.statt()
    #启动子进程proc_reader,读取:
    proc_reader.start()
    #等待proc_writer结束:
    proc_writer1.join()
    proc_writer2.join()
    #proc_reader进程死循环,无法等待其结束,强行终止
    proc_reader.terminate()
#pipe用于俩个进程之间通信
import multiprocessing
import random,time,os


def proc_send(pipe,urls):
    for url in urls:
        print('Processs(%s)send:%s'%(os.getpid(),url))
        pipe.send(url)
        time.sleep(random.random())
def proc_recv(pipe):
    while True:
        print('Processes(%s)rev:%s'%(os.getpid().pipe.recv()))
        time.sleep(random.random())

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_recv,args=(pipe[1],))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值