Действительно ли возможно выполнить функцию в подпроцессе, не распараллеливая или пишущий отдельный файл/сценарий.

import subprocess

def my_function(x):
    return x + 100

output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments
print output 
#desired output: 101

Я только нашел документацию относительно открытия подпроцессов с помощью отдельных сценариев. Кто-либо знает, как передать функциональные объекты или даже простой способ передать функциональный код?

58
задан Amir 3 March 2018 в 19:01
поделиться

2 ответа

Я думаю, что вы ищете что-то большее, как многопроцессорный модуль:

http://docs.ython.org/library/multiProcessing.html#The-Process-Class

Модуль подпроцесса предназначен для нерестовых процессов и делать вещи со своим входом / выходом - не для выполнения функций.

Вот это мультипроцессия версия вашего кода:

from multiprocessing import Process, Queue

def my_function(q, x):
    q.put(x + 100)

if __name__ == '__main__':
    queue = Queue()
    p = Process(target=my_function, args=(queue, 1))
    p.start()
    p.join() # this blocks until the process terminates
    result = queue.get()
    print result
87
ответ дан 24 November 2019 в 18:55
поделиться

Вы можете использовать стандартный системный вызов Unix fork, как os.fork(). fork() создаст новый процесс, с запуском того же самого скрипта. В новом процессе он вернет 0, а в старом - ID нового процесса.

child_pid = os.fork()
if child_pid == 0:
  print "New proc"
else:
  print "Old proc"

Для библиотеки более высокого уровня, обеспечивающей поддержку многопроцессорности, позволяющую использовать несколько процессов, существует модуль multiprocessing. Есть статья о IBM DeveloperWorks, Multiprocessing with Python, с кратким введением в обе техники.

13
ответ дан 24 November 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: