我正在使用Windows上的IPython和Spyder IDE。当IDE启动时,会加载一组py文件来定义一些函数,使我的工作更加轻松。一切都按预期进行。
现在我想将其中一个函数升级为使用多进程,在Windows上需要使用
例如,其中一个py文件(我们称之为test.py)可能类似于以下代码。
在我的IPython控制台中,我想使用以下代码行:
触发所有计算的操作。但在Windows上,会出现BrokenPipe错误。
当我输入时,程序会产生一个缺陷管道错误。
在py文件的末尾添加,并通过运行完整文件来实现。
我的问题是:如何在不将其放入
现在我想将其中一个函数升级为使用多进程,在Windows上需要使用
if __name__ == "__main__":
语句。因此,似乎我不能直接调用该函数并从IPython控制台传递参数。例如,其中一个py文件(我们称之为test.py)可能类似于以下代码。
import multiprocessing as mp
import random
import string
# define a example function
def rand_string(length, output):
""" Generates a random string of numbers, lower- and uppercase chars. """
rand_str = ''.join(random.choice(
string.ascii_lowercase
+ string.ascii_uppercase
+ string.digits)
for i in range(length))
output.put(rand_str)
def myFunction():
# Define an output queue
output = mp.Queue()
# Setup a list of processes that we want to run
processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(4)]
# Run processes
for p in processes:
p.start()
# Exit the completed processes
for p in processes:
p.join()
# Get process results from the output queue
results = [output.get() for p in processes]
print(results)
在我的IPython控制台中,我想使用以下代码行:
myFunction()
触发所有计算的操作。但在Windows上,会出现BrokenPipe错误。
当我输入时,程序会产生一个缺陷管道错误。
if __name__ == "__main__":
myFunction()
在py文件的末尾添加,并通过运行完整文件来实现。
runfile(test.py)
它可以工作。当然。但这使得将参数传递给函数变得非常困难,因为我总是不得不编辑test.py文件本身。
import test
然后调用test.myFunction()
吗? - boardrider