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
Я только нашел документацию относительно открытия подпроцессов с помощью отдельных сценариев. Кто-либо знает, как передать функциональные объекты или даже простой способ передать функциональный код?
Я думаю, что вы ищете что-то большее, как многопроцессорный модуль:
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
Вы можете использовать стандартный системный вызов 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, с кратким введением в обе техники.