у меня есть одна проблема с моим кодом в python3: я пробовал много решений, но все равно тот же результат.
import pprint
import concurrent
import multiprocessing
from concurrent import futures
class exempleStackOverFlow:
def __init__(self):
self.dict1={}
self.headers = {"header1","header2","header3"}
def fillIn(self,key):
response = {key:{'first':['1','2','3']}}
self.dict1.update(response)
pprint.pprint(response)
e = exempleStackOverFlow()
def try_my_operation(item):
try:
e.fillIn(item)
except:
print('error with item')
executor = concurrent.futures.ProcessPoolExecutor(2)
futures = [executor.submit(try_my_operation, item) for item in e.headers]
concurrent.futures.wait(futures)
print(e.dict1)
Результат
{'header3': {'first': ['1', '2', '3']}}
{'header1': {'first': ['1', '2', '3']}}
{'header2': {'first': ['1', '2', '3']}}
{}
Ожидается
{'header3': {'first': ['1', '2', '3']}}
{'header1': {'first': ['1', '2', '3']}}
{'header2': {'first': ['1', '2', '3']}}
{'header1': {'first': ['1', '2', '3']},
'header2': {'first': ['1', '2', '3']},
'header3': {'first': ['1', '2', '3']}}
(или какой бы то ни было порядок заголовков)
Возможно, я не понял, как это работает, я хотел бы немного пролить свет на мою проблему, пожалуйста, dict1 пуст в конце, когда я ввожу try_my_operation
.
он хорошо обновляется без многопроцессорной/одновременной обработки (например, если я делаю e.fillIn("headers1"),e.fillIn("headers2")
... и после того, как я могу получить полный dict1.
Спасибо за любые будущие комментарии
self.dict1.update
? - person Treyten Carey   schedule 29.09.2017self.dict1 equal to {'header1': {'first': ['1', '2', '3']}, 'header2': {'first': ['1', '2', '3']}, 'header3': {'first': ['1', '2', '3']}}
вместо self.dict1 равно {} - person M1n1M1n1ng   schedule 29.09.2017