Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用多处理填充多个列表_Python_Windows_List_For Loop_Multiprocessing - Fatal编程技术网

在Python中使用多处理填充多个列表

在Python中使用多处理填充多个列表,python,windows,list,for-loop,multiprocessing,Python,Windows,List,For Loop,Multiprocessing,我正在尝试提高一个函数填充多个列表的速度,这需要+150秒的时间。我设法通过多处理使它更快,时间缩短到+20秒,但我遇到了两个问题: 1-如何“停止”和“防止”多处理运行脚本的其余部分? 2-是否有更快的方法(多线程、异步IO…) 期望输出: Listing Popups... 808 Hello 当OP发布带有regex标记的问题时,他们应该指定他们使用的语言,因为不同的编程语言支持不同的正则表达式功能。类似地,它被认为是一个要求,当OP发布一个标有multiprocessing的问题时,他

我正在尝试提高一个函数填充多个列表的速度,这需要+150秒的时间。我设法通过多处理使它更快,时间缩短到+20秒,但我遇到了两个问题: 1-如何“停止”和“防止”多处理运行脚本的其余部分? 2-是否有更快的方法(多线程、异步IO…)

期望输出:

Listing Popups...
808
Hello

当OP发布带有
regex
标记的问题时,他们应该指定他们使用的语言,因为不同的编程语言支持不同的正则表达式功能。类似地,它被认为是一个要求,当OP发布一个标有
multiprocessing
的问题时,他们应该指定他们在哪个平台下运行,因为在Linux和Windows下,默认情况下,多处理的实现方式完全不同。但很明显,您是在Windows下运行的,因为您的代码表现出症状

Windows基本上使用
spawn
方法来创建新进程,而Linux/Unix默认使用
fork
方法。当一个新进程被“分叉”时,它将继承与父进程处于相同状态的所有变量,并从“分叉”点继续执行。当一个新进程被“繁殖”时,没有任何东西被继承;创建新的地址空间,加载新的Python解释器,并从顶部重新启动程序。因此,在全局范围内声明的所有内容都将被重新执行(这就是为什么有必要将创建新进程的代码放在
中,如果uuuu name\uuuuuu=='\uuuuuu main\uuuu':
块中,以避免进入无限递归循环)。这就是为什么您的
print(“Hello”)
被反复执行的原因——您创建的每个新进程都将执行该语句,因为它是全局范围的。

print(“Hello”)
必须缩进到
下,如果您不希望它在子进程中运行,则必须缩进到
下。
Listing Popups...
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
808
Hello
[Finished in 19.892s]
Listing Popups...
808
Hello