Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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中使用多处理,对吗? 导入时间 从多处理导入进程 开始=时间。性能计数器() def sleep(): 打印('睡眠1秒…) 时间。睡眠(1) 返回“完成睡眠…” p1=进程(目标=睡眠) p2=进程(目标=睡眠) p1.开始() p2.start() p1.join() p2.join() 完成=时间。性能计数器() 打印(f'在{轮(完成开始,2)}秒内完成)_Python_Python 3.x_Multiprocessing_Python Multiprocessing - Fatal编程技术网

如何在python中使用多处理,对吗? 导入时间 从多处理导入进程 开始=时间。性能计数器() def sleep(): 打印('睡眠1秒…) 时间。睡眠(1) 返回“完成睡眠…” p1=进程(目标=睡眠) p2=进程(目标=睡眠) p1.开始() p2.start() p1.join() p2.join() 完成=时间。性能计数器() 打印(f'在{轮(完成开始,2)}秒内完成)

如何在python中使用多处理,对吗? 导入时间 从多处理导入进程 开始=时间。性能计数器() def sleep(): 打印('睡眠1秒…) 时间。睡眠(1) 返回“完成睡眠…” p1=进程(目标=睡眠) p2=进程(目标=睡眠) p1.开始() p2.start() p1.join() p2.join() 完成=时间。性能计数器() 打印(f'在{轮(完成开始,2)}秒内完成),python,python-3.x,multiprocessing,python-multiprocessing,Python,Python 3.x,Multiprocessing,Python Multiprocessing,输出: Finished in 0.17 second(s) Sleeping 1 second(s)... Sleeping 1 second(s)... Finished in 2.35 second(s) 我尝试使用多处理,但当我运行代码时,它在0.17秒内结束,而不是像预期的1秒,它根本不会启动函数 如果我用这样的括号: p1 = Process(target = sleep()) p2 = Process(target = sleep()) 输出: Finished in 0.1

输出:

Finished in 0.17 second(s)
Sleeping 1 second(s)...
Sleeping 1 second(s)...
Finished in 2.35 second(s)
我尝试使用多处理,但当我运行代码时,它在0.17秒内结束,而不是像预期的1秒,它根本不会启动函数

如果我用这样的括号:

p1 = Process(target = sleep())
p2 = Process(target = sleep())
输出:

Finished in 0.17 second(s)
Sleeping 1 second(s)...
Sleeping 1 second(s)...
Finished in 2.35 second(s)
视窗10。python 3.7.4
谢谢:)

我已经解决了这个问题,为了使您的代码正常工作,您应该添加if
\uuuuuuuu name\uuuuuuuu='\uuuuuu main\uuuuu'
。您的两个新进程都需要访问def sleep(),若要访问def sleep(),您必须将代码的“可执行”部分通过
\uuuu name\uuu==“\uuu main\uuu”
分隔开,或者将def sleep()放入另一个文件中,然后从文件名导入sleep将其导出

import time
from multiprocessing import Process
start = time.perf_counter()


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


if __name__ == "__main__":
    p1 = Process(target = sleep)
    p2 = Process(target = sleep)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    finish = time.perf_counter()
    print(f'Finished in {round(finish-start, 2)} second(s)')

希望答案对你有用

Doug Hellmann编写的网站表单手册“Python 3标准库示例”:

线程和多处理示例之间的一个区别是额外的保护 对于包含在多处理示例中的
\uuuuu main\uuuuu
。由于新流程的方式 启动后,子进程需要能够导入包含目标函数的脚本。 在检查
\uuuu main\uuuuu
时包装应用程序的主要部分可确保它确实如此 在导入模块时,不要在每个子级中递归运行。另一种方法是进口 从单独的脚本中删除目标函数。例如,multiprocessing_import_main.py 使用第二个模块中定义的辅助函数


对于3.7,您的代码在meCheck中的运行与预期的一样,在Python3.8下,您的代码也在运行<代码>在1.16秒内完成。代码输出后,请注意第二个版本需要2秒的原因是主线程中正在计算
sleep()
,并且将
sleep()
的返回值作为目标传递。这不会改变任何事情。在睡眠状态下尝试打印(\uuuuu name\uuuuuu)。进程不执行文件,只执行函数。@graphite我没有编写该进程执行文件,但它应该有权访问定义的函数。为此,函数应该在单独的文件中,或者用name==main形式其他代码分隔,name==main定义当我们直接运行文件时会发生什么,以上都是“支持”如果运行操作代码,则会出现以下错误:“RuntimeError:在当前进程完成引导阶段之前,尝试启动新进程。这可能意味着您没有使用fork启动子进程,并且忘记了在主模块中使用正确的习惯用法:if name='main':freeze\u support()或“freeze\u support()”如果程序不会被冻结以生成可执行文件,则可以省略第行。“OP代码按预期为我运行,是的,它确实会fork。明白了。这是Windows上的默认值。