所以我試圖比較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)
添加回答
舉報
0/150
提交
取消