Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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多进程库:使用导入的包时发生NameError_Python_Multiprocessing_Global_Multiprocess - Fatal编程技术网

Python多进程库:使用导入的包时发生NameError

Python多进程库:使用导入的包时发生NameError,python,multiprocessing,global,multiprocess,Python,Multiprocessing,Global,Multiprocess,以下代码可以完美地工作: 来自多处理导入池的 导入时间 值=列表(范围(10)) def打印时间和值(值): 打印(time.time(),值) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': p=池(4) p、 映射(打印时间和值、值) 但当我将“多处理”导入更改为库时: 它在执行过程中引发以下错误: Traceback (most recent call last): File "test.py", line 13, in <module&

以下代码可以完美地工作:

来自多处理导入池的

导入时间
值=列表(范围(10))
def打印时间和值(值):
打印(time.time(),值)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
p=池(4)
p、 映射(打印时间和值、值)
但当我将“多处理”导入更改为库时:

它在执行过程中引发以下错误:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    p.map(print_time_and_value, values)
  File "C:\Users\User\Anaconda3_64bits\lib\site-packages\multiprocess\pool.py", line 268, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Users\User\Anaconda3_64bits\lib\site-packages\multiprocess\pool.py", line 657, in get
    raise self._value
NameError: name 'time' is not defined
回溯(最近一次呼叫最后一次):
文件“test.py”,第13行,在
p、 映射(打印时间和值、值)
文件“C:\Users\User\Anaconda3\u 64bits\lib\site packages\multiprocess\pool.py”,第268行,在map中
返回self.\u map\u async(func、iterable、mapstar、chunksize).get()
get中第657行的文件“C:\Users\User\Anaconda3_64bits\lib\site packages\multiprocess\pool.py”
提升自我价值
NameError:未定义名称“时间”
我不能使用多重处理,因为我以后必须在我的主应用程序上使用不可拼接的对象,所以我必须使用多重处理,它具有dill序列化

我注意到,将“time”导入放在“print\u time\u and\u value”函数中,而不是放在全局范围内,可以解决这个问题,但这种行为有点奇怪。由于它是多处理的一个分支,我猜它也会以同样的方式工作


我使用的是Python 3.7.0,多进程模块的版本是0.70.7;运行在64位Anaconda环境,Windows 10上。

我是多进程
的作者。我看到你在Windows上。。。在Windows上运行时,我建议您使用
冻结\u支持
。我相信这应该可以解决您看到的
名称错误

import multiprocess as mp
import time

values = list(range(10))

def print_time_and_value(value):
    print(time.time(), value)


if __name__ == '__main__':

    mp.freeze_support()  # needed for Windows
    p = mp.Pool(4)
    p.map(print_time_and_value, values)
使用
多进程
时,您的代码甚至可以在解释器中工作:

Python 3.7.3 (default, Mar 30 2019, 05:40:15) 
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import multiprocess as mp
>>> import time
>>> values = list(range(10))
>>> def print_time_and_value(value):
...     print(time.time(), value)
... 
>>> p = mp.Pool(4)
>>> _ = p.map(print_time_and_value, values)
1556681189.844021 0
1556681189.8443708 1
1556681189.8446798 2
1556681189.845576 4
1556681189.84569 5
1556681189.8458931 3
1556681189.846055 6
1556681189.846396 7
1556681189.846845 8
1556681189.847295 9
>>> 

请注意,我通常会在函数中包含
导入时间
,因为它使序列化更容易。

我不熟悉
多进程
,但听起来好像它没有正确序列化(或反序列化)
打印时间和值
Python 3.7.3 (default, Mar 30 2019, 05:40:15) 
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import multiprocess as mp
>>> import time
>>> values = list(range(10))
>>> def print_time_and_value(value):
...     print(time.time(), value)
... 
>>> p = mp.Pool(4)
>>> _ = p.map(print_time_and_value, values)
1556681189.844021 0
1556681189.8443708 1
1556681189.8446798 2
1556681189.845576 4
1556681189.84569 5
1556681189.8458931 3
1556681189.846055 6
1556681189.846396 7
1556681189.846845 8
1556681189.847295 9
>>>