Я пытаюсь распараллелить набор кода, в котором мне нужно передать некоторые постоянные параметры, которые перебирают список.Исходя из природы констант, имеет смысл передать это в паре словарей.Когда я запускаю приведенный ниже код, он прекрасно работает, если бы я должен был выполнить итерацию моего mymod.myfuncname (a, b, x), где x - это итерация c в цикле for (однопоточный).
При попыткеРаспараллеливая код, виновником является словарь "b", в котором передается объект соединения ODBC как одно из значений, назначенных ключу в этом словаре.Вместо передачи строки подключения и создания объекта подключения каждый раз, когда функция выполняется, кто-нибудь знает о каких-либо других способах распараллеливания с аргументами с несколькими входами, которые позволяют передавать более сложные объекты. В качестве альтернативы, я должен что-то ещеиспользовать functools.partial для обработки чего-то вроде объекта подключения ODBC, встроенного в словарь?
#Import Stuff
import multiprocessing as mp
import functools as ft
import pyodbc
import mymod
#Initialize Stuff
value1 = 0
cnxn = pyodbc.connect(cnxnstr)
#Initialize Constant Stuff Into Dictionaries
a = {'Param1':value1}
b = {'DBConn':cnxn}
#Initialize List
c = ['f1','f2','f3','f4','f5','f6','f7','f8']
#Setup Pool
p1 = mp.Pool(16)
#Create Partial Object
func = ft.partial(mymod.myfuncname,a,b)
#Parallelize Across List "c"
p1.map_async(func,c)