我有两个函数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?