我有个奇怪的问题。在
我有一个python程序,它执行单独的.py文件中保存的代码,设计成按顺序执行,一个接一个地执行。代码运行良好,但运行时间太长。我的计划是使用多处理.pool.map_异步(函数,参数)使用execfile()作为函数,文件名作为参数。在
所以不管怎样,当我运行代码时,绝对不会发生任何事情,甚至没有错误。在
看看你能不能帮我,我把文件放进去序列文件.runner(序列文件.file). 在
class FileRunner:
def __init__(self, file):
self.file = file
def runner(self, file):
self.run = pool.map_async(execfile, file)
SeqFile = FileRunner("/Users/haysb/Dropbox/Stuart/Sample_proteins/Code/SVS_CodeParts/SequencePickler.py")
VolFile = FileRunner("/Users/haysb/Dropbox/Stuart/Sample_proteins/Code/SVS_CodeParts/VolumePickler.py")
CWFile = FileRunner("/Users/haysb/Dropbox/Stuart/Sample_proteins/Code/SVS_CodeParts/Combine_and_Write.py")
(SeqFile.runner(SeqFile.file))
你有几个问题-我猜你以前从没用过
multiprocessing
。在您的问题之一是启动异步操作,但从不等待它结束。如果你等待它结束,你会得到更多的信息。例如,添加:
这样做,您将看到在子进程中引发的异常:您将
^{pr2}$execfile
映射到绑定到file
的字符串上,因此execfile
一次只能看到一个字符。execfile
当它试图做的第一件事是(实际上):apply_async()
会更有意义,或者map_async()
传递了所有要运行的文件的列表。在等等-这很无聊;-)
细节
让我们去掉这里不相关的cruft,并展示一个完整的可执行程序。我有三个文件}。以下是
a.py
,b.py
和{a.py
:另外两个是明显的变化。在
这是我的整个司机:
就这样,打印(一些排列):
imap_unordered()
在工作进程之间拆分文件列表,而不关心(“无序”)它们的运行顺序。这样效率最高。请注意,我将worker的数量限制为2,只是为了表明即使文件(3)比worker进程(2)多,它仍然可以正常工作。在您可以让任何
Pool
函数以类似方式工作。例如,如果您要使用map_async()
,请将imap_unordered()
调用替换为:或者:
更清楚?一开始尽量简单。在
相关问题 更多 >
编程相关推荐