Какой лучший способ дублировать fork () в Windows?

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

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

22.08.2008 20:27:46
7 ОТВЕТОВ

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

0
22.08.2008 20:34:00
Вот что multiprocessingделает в наши дни Windows. docs.python.org/3.5/library/…
clacke 13.09.2016 13:06:12

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

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

3
22.08.2008 20:38:18
subprocessи multiprocessing(предложенный RJBrady) может быть лучшей альтернативой osи threading.
jfs 4.10.2008 17:24:23

В дополнение к коду управления процессами в модуле 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
3.11.2014 09:22:54

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

2
24.08.2008 15:38:21
Начиная с Python 2.6 / 3.0 (октябрь и декабрь 2008 г.), processingявляется частью стандартной библиотеки as multiprocessing.
clacke 13.09.2016 13:01:14

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

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

3
9.09.2008 15:37:18
multiprocessingМодуль является частью стандартной библиотеки. subprocessподходит для внешних программ, multiprocessingподходит для кода Python.
jfs 4.10.2008 17:21:19

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

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

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

10
5.02.2014 03:45:08

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

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

17
16.05.2011 16:51:18
Это правильный ответ, но из-за отсутствия в fork()Windows есть несколько предостережений, главное из которых состоит в том, чтобы убедиться, что любой сценарий защищен if __name__ == "__main__"охраной, если он должен вызывать любой код, который выполняет многопроцессорность. Порожденный процесс запускается заново и нуждается в загрузке модулей, чтобы иметь возможность восстановить состояние.
clacke 13.09.2016 13:18:38
multiprocessing.Process()Сериализуются ли передаваемые аргументы для передачи новому процессу? Я написал приложение клиент-сервер SSL. Сервер разветвляет новый процесс для каждого полученного запроса, но поднимается TypeError: cannot serialize socket object. Делать то же самое с простым (не SSL) сокетом работало, как описано здесь . Но я не уверен, как ошибка возникла в socket.py, line 185, in __getstate__.
Mahesha999 19.06.2018 08:09:02