#python #printing #google-colaboratory
#python #печать #google-совместная лаборатория
Вопрос:
Я не вижу никаких выходных данных в Google colab, когда я использую python Process
. Я пробовал print
функцию и logging
модуль, но это не работает. Этот простой пример выдает выходные данные на моем компьютере (jupyter notebook, python 3.6.9), но не работает в colab:
from multiprocessing import Process
import time
def simple_fun(proc_id):
while True:
time.sleep(1)
print(proc_id)
N_PROCESS = 2
processes = []
for i in range(N_PROCESS):
p = Process(target=simple_fun, args=(i,))
p.start()
processes.append(p)
Могу ли я что-нибудь сделать?
Я что-то упускаю? Может быть, приведенный выше код зависит от платформы?
Ответ №1:
Этот пример процесса работает в Google colab (Python 3.6.9)
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
if hasattr(os, 'getppid'): # only available on Unix
print( 'parent process:', os.getppid())
print( 'process id:', os.getpid())
def f(name):
info('function f')
print('hello', name)
if __name__ == '__main__':
info('main line')
p = Process(target=f, args=('bob',))
p.start()
p.join()
Комментарии:
1. Это работает, потому что вы добавили
p.join()
. По какой-то причинеjoin
, но не работает в Google colab.
Ответ №2:
Я обнаружил, что это не работает только тогда, когда я не жду процесса с join
функцией.
Я не могу заблокировать все процессы сразу.
Но если работа процесса занимает примерно одинаковое количество времени для всех процессов, я могу заблокировать только один процесс:
from multiprocessing import Process
import time
import logging
def simple_fun(proc_id):
while True:
time.sleep(1)
#logging.info(proc_id)
print(proc_id)
N_PROCESS = 2
processes = []
for i in range(N_PROCESS):
p = Process(target=simple_fun, args=(i,))
p.start()
processes.append(p)
processes[0].join() # <- wait for one of processes
Это работает.