Python : процесс запускает первую функцию, но не остальные

#python #multiprocessing

#питон #многопроцессорная обработка

Вопрос:

У меня есть проблема с процессами python, действительно, у меня есть следующая функция:

 def line_processing(i: int, df: pd.DataFrame, df_score: pd.DataFrame,   sheet_id: str, sheet_score_id: str, folder_texte: str,   folder_guide_id: str):  print('get_text_boilerpipe : '   str(i))  call_get_text_boilerpipe(df.url[i], df, i, folder_texte)   print('post_yourtextguru_guide : '   str(i))  call_post_yourtextguru_guide(df.keyword[i], df, i)   print('get_yourtextguru_guide : '   str(i))  call_get_yourtextguru_guide(df.guide_id[i], df, i, folder_guide_id)   print('post_yourtextguru_score : '   str(i))  call_post_yourtextguru_score(df.guide_id[i], df.extract_text[i],   df, df_score, i)    print('write_sheet : '   str(i))  write_sheet(sheet_id, df)  write_sheet(sheet_score_id, df_score)  

Функция работает правильно, но когда я пытаюсь включить ее в процесс, с :

 p = Process(target=line_processing, args=(4, df_complete, df_score, sheet_complete, sheet_score, folder_texte, folder_guide_id,)) p.start() p.join()  

Он выполняет только первую функцию и никогда не переходит к следующим

 get_text_boilerpipe : 4  

Вот пример одной из моих функций, все они имеют одинаковую форму:

 def get_text_boilerpipe(url: str) -gt; str:  extractor = Extractor(extractor='ArticleExtractor', url=url)  return extractor.getText()  def call_get_text_boilerpipe(url: str, df: pd.DataFrame, i: int, parent_id: str):  if df.status[i] in ('TEXT_FAIL', 'NaN'):  try:  content = get_text_boilerpipe(url)  if content:  if len(str(content)) lt; 50000:  doc_id = create_texte_googledoc(df.keyword[i], parent_id, str(content))  df.texte_doc_url[i] = 'https://docs.google.com/document/d/'   str(doc_id)  df.extract_text[i] = str(content)  df.status[i] = 'TEXT_OK'  df.log[i] = np.nan  else:  df.status[i] = 'TEXT_FAIL'  df.log[i] = 'Texte récupéré trop gros (gt;50000 caractères)'  else:  df.status[i] = 'TEXT_FAIL'  df.log[i] = 'Aucun contenu extrait de l'url'  except:  e = sys.exc_info()[0]  df.status[i] = 'TEXT_FAIL'  df.log[i] = "Error: %s" % e   return 0  

Знаете ли вы, почему он никогда не переходит к следующей функции в процессе? Я сделал что-то не так? Спасибо!

Комментарии:

1. Может быть, я что-то упускаю, но: пока вы активно не переносите результаты из порожденного/разветвленного процесса обратно в ведущий процесс, они исчезают. Существуют различные способы сделать это, используя каналы, очереди, запись на диск, использование pool.map вместо отдельных процессов и т. Д.