使用线程进行多处理?

时间:2017-07-16 14:50:31

标签: python python-3.x web-crawler

当我尝试使我的脚本多线程时,

我发现了多处理,

我想知道是否有办法让多处理与线程一起工作?

  • cpu 1 - > 3个线程(工人A,B,C)
  • cpu 2 - > 3个线程(工人D,E,F)
  • ...

我试图自己做,但我遇到了很多问题。

有没有办法让这两个人一起工作?

2 个答案:

答案 0 :(得分:5)

您可以生成一些Processes,然后从其中生成Threads。每个进程几乎可以处理标准解释器线程可以处理的任何内容,因此没有什么能阻止您在每个进程中创建新的线程甚至是新的进程。作为一个最小的例子:

def foo():
    print("Thread Executing!")

def bar():
    threads = []
    for _ in range(3): # each Process creates a number of new Threads
        thread = threading.Thread(target=foo) 
        threads.append(thread)
    for thread in threads:
        thread.start()
    for thread in threads:
        thread.join()

if __name__ == "__main__": 
    processes = []
    for _ in range(3):
        p = multiprocessing.Process(target=bar) # create a new Process
        processes.append(p)
    for process in processes:
        process.start()
        process.join()

线程之间的通信可以在每个Process内处理,并且可以使用队列或管理器对象在根解释器级别处理进程之间的通信。

答案 1 :(得分:1)

您可以定义function process并使其运行3 threads,然后生成您的流程以定位此function,例如:

def threader(process):
    for _ in range(3):
        threading.Thread(target=yourfunc).start()

def main():
    # spawn whatever processes here to target threader