На машине под управлением Windows Server 2012 R2, в IDE Spyder от Anaconda и под управлением Python 3.7 со следующим кодом:
import time
import multiprocessing
start=time.perf_counter()
def do_something():
print('func start')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
И я получаю вывод
имя является основным
Программа выполнена за 0,13 с
До свидания!
Я ожидал, что увижу два оператора печати
веселье c начало
веселье c конец
, а также (потому что .join был вызван), что для выполнения программы потребуется> 1 с.
Я подозреваю, что вызов .start () не успешно вызвал функцию do_something.
К вашему сведению, я следую этому руководству , которое, как я знаю, необходимо изменить, чтобы включить оператор if в windows. Я также вижу похожий код на других сайтах , но, похоже, не работает с моей стороны.
Буду весьма признателен за любые предложения по устранению неполадок.
** РЕДАКТИРОВАТЬ: Согласно комментарию ниже от Azy_Crw4282, код, кажется, работает на его конце и, по его предложению, кажется, работает из командной строки cmd. Так что, похоже, это ошибка именно в Spyder IDE.
К вашему сведению, я хотел понять, была ли проблема в том, что процесс запускался, но IDE не захватывал выходные данные ИЛИ процесс не запускался. Я попробовал две вещи: 1) код ниже записывает фрейм данных в csv. Делая это в многопроцессорной функции, он НЕ записывает файл. 2) Я создал глобальную переменную и изменил значение переменной в функции. Spyder сохраняет значения переменных после выполнения кода, и когда я напечатал переменную, она не изменилась.
Итак, в итоге - кажется, что Spyder IDE не работает с модулем многопроцессорной обработки. **
import time
import multiprocessing
start=time.perf_counter()
df=pd.DataFrame(data={'Col1':[1.1,2.1,3.1],
'Col2':[1.2,2.2,3.2],
'Col3':[1.3,2.3,3.3]}, columns=['Col1','Col2','Col3'])
def do_something():
print('func start')
df.to_csv('C:/testMp.csv')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')