在python3中的线程内运行多个并行作业

时间:2017-12-17 10:26:46

标签: parallel-processing python-3.6 python-multithreading joblib

我有两个函数func1()func2()彼此独立,可以在两个线程中运行。我在threading中使用python3库来运行这两个线程。但在func1()内,我使用for 并行运行joblib个循环。因此,使用线程和joblib会发出以下警告 -

/usr/local/lib/python3.6/dist-packages/joblib/parallel.py:547: UserWarning: Multiprocessing-backed parallel loops cannot be nested below threads, setting n_jobs=1

然后func1()内的for循环才会顺序运行。

以下是代码段的示例:

from joblib import Parallel, delayed
import threading
from math import sqrt

class MyThread(threading.Thread):
    def __init__(self, sample, type):
        threading.Thread.__init__(self)
        self.type = type
        self.sample = sample
    def run(self):
        if self.type=='func1':
            self.sample.func1()
        else:
            self.sample.func2()

class Sample:
   def func1(self):
       print('this function runs for loop in parallel.')
       ans = Parallel(n_jobs=8)(delayed(sqrt)(i**2) for i in range(1000)) 

   def func2(self):
       print('this function runs sequentially.')

   def try(self):    
       thread1 = MyThread(self, 'func1')
       thread2 = MyThread(self, 'func2')

       thread1.start()
       thread2.start()

       thread1.join()
       thread2.join()

       print('Done...')

if __name__ == '__main__':
    s = Sample()
    s.try()

我该如何解决这个问题?或者,如果它是一个joblib问题,是否还有其他库可用于代替joblib?

0 个答案:

没有答案