Какой лучший способ дублировать fork () в Windows? - PullRequest
22 голосов
/ 23 августа 2008

Как реализовать некоторую логику, которая позволит мне воспроизводить в Windows функциональность, которая есть у меня в Linux с системным вызовом fork(), с использованием Python?

Я специально пытаюсь выполнить метод в компоненте SAPI Com, продолжая при этом другую логику в основном потоке без блокировки или ожидания.

Ответы [ 7 ]

17 голосов
/ 16 мая 2011

Используйте многопроцессорный модуль python , который будет работать везде.

Вот статья IBM developerWords , в которой показано, как преобразовать os.fork () в многопроцессорный модуль.

10 голосов
/ 04 октября 2008

fork() имеет фактически дублированный в Windows, под Cygwin , но он довольно волосатый.

Вызов вилки в Cygwin особенно интересен, поскольку он плохо отображается поверх Win32 API. Это очень затрудняет правильную реализацию.

См. Руководство пользователя Cygwin для описания этого хака.

3 голосов
/ 09 сентября 2008

Пример Threading от Eli запустит поток, но не выполнит какую-либо работу после этой строки.

Я собираюсь заглянуть в модуль обработки и модуль подпроцесса. Я думаю, что метод com, который я запускаю, должен быть в другом процессе, а не просто в другом потоке.

3 голосов
/ 23 августа 2008

В дополнение к коду управления процессами в модуле os, который указал Грег, вы также должны взглянуть на модуль потоков: https://docs.python.org/library/threading.html

from threading import Thread

def separate_computations(x, y):
    print sum(x for i in range(y))  # really expensive multiplication

Thread(target=separate_compuations, args=[57, 83]).start()
print "I'm continuing while that other function runs in another thread!"
3 голосов
/ 23 августа 2008

Ознакомьтесь с функциями управления процессами в модуле os . Есть функция для запуска новых процессов разными способами, как синхронно, так и асинхронно.

Следует также отметить, что Windows не предоставляет функциональность, которая аналогична функции fork () в других системах. Чтобы выполнить многопроцессорную работу в Windows, вам потребуется модуль threading .

2 голосов
/ 24 августа 2008

Вам также может понравиться использование модуля обработки (http://pypi.python.org/pypi/processing).. Он имеет множество функциональных возможностей для написания параллельных систем с тем же API, что и модуль потоков ...

0 голосов
/ 23 августа 2008

Возможно, версия spawn () для python? http://en.wikipedia.org/wiki/Spawn_(operating_system)

...