为了账号安全,请及时绑定邮箱和手机立即绑定

线程模块和多处理模块的比较

线程模块和多处理模块的比较

qq_花开花谢_0 2022-10-06 16:09:49
所以我试图比较threading是更快还是multiprocessing。理论上,由于GIL,多处理应该比多线程更快,因为一次只运行一个线程。但是我得到了相反的结果,即线程比多处理花费的时间更少,我缺少什么请帮忙。下面是线程的代码import threadingfrom queue import Queueimport timeprint_lock = threading.Lock()def exampleJob(worker):    time.sleep(10)      with print_lock:        print(threading.current_thread().name,worker)def threader():    while True:        worker = q.get()        exampleJob(worker)        q.task_done()q = Queue()for x in range(4):     t = threading.Thread(target=threader)     print(x)     t.daemon = True     t.start()start = time.time()for worker in range(8):    q.put(worker)q.join()print('Entire job took:',time.time() - start)下面是多处理的代码import multiprocessing as mpimport timedef exampleJob(print_lock,worker):                 # function simulating some computation    time.sleep(10)    with print_lock:        print(mp.current_process().name,worker)def processor(print_lock,q):                       # function where process pick up the job    while True:        worker = q.get()        if worker is None: # flag to exit the process            break        exampleJob(print_lock,worker)if __name__ == '__main__':    print_lock = mp.Lock()    q = mp.Queue()    processes = [mp.Process(target=processor,args=(print_lock,q)) for _ in range(4)]    for process in processes:        process.start()        start = time.time()    for worker in range(8):        q.put(worker)    for process in processes:        q.put(None) # quit indicator    for process in processes:        process.join()    print('Entire job took:',time.time() - start)
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

由于 GIL 的存在,仅当您执行计算密集型任务时,添加到 @zmbq 线程才会更慢。如果您的操作是 I/O 绑定的并且很少有其他类似的操作,那么线程肯定会更快,因为涉及的开销更少。请参阅以下博客以更好地理解相同的内容。

作为数据科学家利用 Python 中的多处理和多线程

希望这可以帮助!


查看完整回答
反对 回复 2022-10-06
?
偶然的你

TA贡献1841条经验 获得超3个赞

这不是一个适当的测试。time.sleep可能不会获得 GIL,因此您正在运行并发线程与并发进程。线程更快,因为没有启动成本。

您应该在线程中执行一些计算,然后您会看到差异。


查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信