multiprocessing.Process() 刚刚停止工作

Posted

技术标签:

【中文标题】multiprocessing.Process() 刚刚停止工作【英文标题】:multiprocessing.Process() just stopped working 【发布时间】:2020-03-19 16:45:23 【问题描述】:

我在 Spyder 上自学 Python 中的多线程处理,并且正在研究一些相对简单的示例,但突然停止工作。回到以前有效的一些更简单的例子,现在它们似乎没有那么好用了。我想不出我能做些什么来让他们停止工作。以下是我的代码:

import time
import multiprocessing

start = time.perf_counter()

def do_something():
    print('Sleeping 1 second...')
    time.sleep(1)
    print('Done Sleeping...')


p1 = multiprocessing.Process(target = do_something)
p2 = multiprocessing.Process(target = do_something)

p1.start()
p2.start()

p1.join()
p2.join()


finish = time.perf_counter()


print(f'Finished in round(finish - start, 2) second(s)')

它似乎只是像中间部分一样运行:

p1 = multiprocessing.Process(target = do_something)
p2 = multiprocessing.Process(target = do_something)

p1.start()
p2.start()

p1.join()
p2.join()

没有吗?

编辑

唯一的输出是

Finished in 0.64 second(s)

没有错误信息。

【问题讨论】:

停止工作是什么意思?报错? 它就像多处理代码不存在一样运行,输出“在 0.64 秒内完成” 【参考方案1】:

您需要阅读error 并按照说明进行操作!

RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

请运行以下代码:

import multiprocessing


def worker(num):
    """Returns the string of interest"""
    return "worker %d" % num


def main():
    pool = multiprocessing.Pool(4)
    results = pool.map(worker, range(10))

    pool.close()
    pool.join()

    for result in results:
        # prints the result string in the main process
        print(result)


if __name__ == '__main__':
    # Better protect your main function when you use multiprocessing
    main()

【讨论】:

谢谢,我从来没有遇到任何错误,它刚刚完成,就像多处理代码没有说“在 0.64 秒内完成”一样 @ChristopherEll 你是通过 Windows 运行它吗?如是。所以IDLE。请确认您是否以python script.py 运行它 是的,我在 Spyder 上的 Windows 上运行 @ChristopherEll ***.com/questions/18204782/… 谢谢 αԋɱҽԃ αмєяιcαη 我想我还是有问题 我尝试将 if name == 'main' 放在程序的各个点但仍然得到几乎相同的结果。

以上是关于multiprocessing.Process() 刚刚停止工作的主要内容,如果未能解决你的问题,请参考以下文章

Python 多进程编程之multiprocessing--Process

multiprocessing.Process() 刚刚停止工作

python多进程——multiprocessing.Process

multiprocessing模块

多进程的调用(multiprocessing.Process)

如何恢复传递给 multiprocessing.Process 的函数的返回值?