macOS,python多进程模块multiprocessing

2020-12-30  本文已影响0人  DayBreakL

python多进程multiprocessing相关,此段代码在windows上能正常运行。

from multiprocessing import Process,Queue

# 多进程之间的通讯问题 multiprocessing模块中的Queue
import requests

count = 1

def work1(q):
    while q.qsize() > 0:
        global count
        # 获取任务
        url = q.get()
        requests.get(url)
        print("work1正在执行任务---{}".format(count))
        count += 1


def work2(q):
    while q.qsize() > 0:
        global count
        # 获取任务
        url = q.get()
        requests.get(url)
        print("work2正在执行任务---{}".format(count))
        count += 1


if __name__ == '__main__':
    q = Queue()
    for i in range(10):
        q.put("http://httpbin.org/get")
    # 传了同一个对象进去,所以两个进程共享一个对象
    p1 = Process(target=work1,args=(q,))
    p2 = Process(target=work2,args=(q,))

    # 开始
    p1.start()
    p2.start()

windows下运行结果:


mac下运行结果:


原因:多进程模块multiprocessing下的Queue.qsize()和Queue.empty()方法在Unix平台上无法正常使用,如macOS上。

解决方法找到了,再补充。

上一篇下一篇

猜你喜欢

热点阅读