我可以在python2/3中同时使用多个不同方法进行多处理吗
我想让我的两种不同的方法同时进行。 我希望通过多处理器来完成,但是我发现所有的例子都是在多处理器上使用相同的方法,而不是在多处理器上使用不同的方法。 我的代码如下,它是按顺序进行的,而不是按顺序进行的我可以在python2/3中同时使用多个不同方法进行多处理吗,python,subprocess,Python,Subprocess,我想让我的两种不同的方法同时进行。 我希望通过多处理器来完成,但是我发现所有的例子都是在多处理器上使用相同的方法,而不是在多处理器上使用不同的方法。 我的代码如下,它是按顺序进行的,而不是按顺序进行的 #-*-coding:utf-8-*- import multiprocessing import time #def thread_test(num1,num2): #x=5 def haha(num1): for i in range(num1): time.sleep(
#-*-coding:utf-8-*-
import multiprocessing
import time
#def thread_test(num1,num2):
#x=5
def haha(num1):
for i in range(num1):
time.sleep(1)
print('a')
def hehe(num2):
for i in range(num2):
time.sleep(1)
print('b')
if __name__=='__main__':
pool = multiprocessing.Pool(processes=4)
pool.apply_async(haha(5))
pool.apply_async(hehe(5))
pool.close()
pool.join()
print("done")
印刷品如下
a
a
a
a
a
b
b
b
b
b
done
我想这已经得到了回答,但我找不到重复的地方,我需要更多的评论来描述正在发生的事情,所以这里是: 代码的问题在于,实际上您没有在不同的进程中执行函数。相反,您尝试在新流程中执行函数的返回值
haha
和hehe
。由于您没有定义任何return
值,因此它们返回None
.apply\u async
(和类似的函数)需要使用裸函数名作为第一个参数调用,然后使用参数作为第二个参数调用(包装为元组
)。这是需要的,因为Python(以及几乎所有其他编程语言)定义了执行顺序,其中函数argumnets在函数本身之前进行求值。因此,当调用一个参数为另一个函数调用的函数时,首先计算内部函数调用
因此,解决方案是调用外部函数,而不是使用内部函数调用,而是使用裸函数名(然后用作内部函数的引用),然后将内部函数的参数作为外部函数的单独参数。这样,在外部函数开始执行之前,就没有什么可计算的了。因此,对于目前的情况,解决方案很简单。只需将代码更改为:
#-*-coding:utf-8-*-
import multiprocessing
import time
def haha(num1):
for i in range(num1):
time.sleep(1)
print('a')
def hehe(num2):
for i in range(num2):
time.sleep(1)
print('b')
if __name__=='__main__':
pool = multiprocessing.Pool(processes=4)
pool.apply_async(haha, (5,)) # instead of pool.apply_async(haha(5))
pool.apply_async(hehe, (5,)) # instead of pool.apply_async(hehe(5))
pool.close()
pool.join()
print("done")
我希望这个解释对您有意义,并帮助您在将来注意这些情况。我明白了。在我看来,我的func在被放入池中之前已经完成了。非常感谢,你说的话教会了我很多。