python3多处理示例崩溃了我的电脑:(

Rhy*_*hys 4 python multiprocessing python-3.x

我是多处理新手

我已经为两个"强烈推荐"的多处理示例运行了示例代码,以响应其他stackoverflow多处理问题.这是一个例子(我不敢再跑了!)

test2.py(从pydev运行)

import multiprocessing

class MyFancyClass(object):

    def __init__(self, name):
        self.name = name

    def do_something(self):
        proc_name = multiprocessing.current_process().name
        print(proc_name, self.name)


def worker(q):
    obj = q.get()
    obj.do_something()



queue = multiprocessing.Queue()

p = multiprocessing.Process(target=worker, args=(queue,))
p.start()

queue.put(MyFancyClass('Fancy Dan'))

# Wait for the worker to finish
queue.close()
queue.join_thread()
p.join()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我的计算机很快就会慢下来.它逐渐变慢.过了一段时间,我设法进入任务管理器只看到进程选项卡下的许​​多许多python.exe.在尝试结束某些过程后,我的鼠标停止移动.这是我第二次被迫重启.
我太害怕尝试第三个例子......

运行 - 英特尔(R)酷睿(TM)i7 CPU 870 @ 2.93GHz(8个CPU),win7 64上约2.9GHz

如果有人知道这个问题是什么,并且可以提供一个非常简单的多处理示例(发送字符串也是一个多进程) ,改变它并将其送回打印)我将非常感激.

unu*_*tbu 9

来自文档:

确保新的Python解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程).

因此,在Windows上,您必须将代码包装在一个

if __name__=='__main__':
Run Code Online (Sandbox Code Playgroud)

块.


例如,这会向工作进程发送一个字符串,字符串被反转,结果由主进程打印:

import multiprocessing as mp

def worker(inq,outq):
    obj = inq.get()
    obj = obj[::-1]
    outq.put(obj)

if __name__=='__main__':
    inq = mp.Queue()
    outq = mp.Queue()

    p = mp.Process(target=worker, args=(inq,outq))
    p.start()

    inq.put('Fancy Dan')

    # Wait for the worker to finish
    p.join()
    result = outq.get()
    print(result)
Run Code Online (Sandbox Code Playgroud)