Когда я запускаю следующий код, я вижу, что переменные z и w внутри функции имеют разные местоположения, но я не понимаю, почему это так.
import multiprocessing
from functools import partial
class SomeClass:
pass
w = SomeClass()
print("w outside function")
print(w)
def some_function(x, y, z):
print("w inside function")
print(w)
print("z")
print(z)
return x * 2
pool = multiprocessing.Pool(processes=4)
some_function_partial = partial(some_function, z=w)
summary = pool.starmap(some_function_partial, [(3, 2)])
pool.close()
pool.join()
Вывод:
w outside function
<__main__.SomeClass object at 0x104916080>
w inside function
<__main__.SomeClass object at 0x104916080>
z
<__main__.SomeClass object at 0x104ef66d8>
Если в главном потоке выполняется частичная функция, все три оператора печати показывают, что печатаемые переменные ссылаются на один и тот же экземпляр.
Если он запускается со звездообразным изображением, то расположение z внутри функцииотличается от w вне функции.Этого я и ожидал, так как функция отправляется в разностный процесс для запуска и, по-видимому, сериализации / десериализации.Тем не менее, когда я запускаю starmap, расположение w внутри и снаружи функции одинаково, и я чувствую, что мне не хватает фундаментального понимания того, почему ... Любая помощь будет принята с благодарностью!