Что лучший способ состоит в том, чтобы выполнить несколько подпроцессов через ветвление ()?

Вы можете использовать numpy.select и для получения имен столбцов format:

for i in range (1980,2015,5):
    m1 = df["DWWC{}".format(i)] <=18.25
    #inverted m1 mask by ~
    m2 = ~m1 & (df["DWWC{}".format(i)] <= 36.5)
    a = (((10-33)/(5))*(df["DWWC{}".format(i)]-5))+10 
    b = ((10/(df.two-df.three))*(df["DWWC{}".format(i)]-df.three))+df.Three
    c = (((df.Three_value-6)/(df.three-5))*(df["DWWC{}".format(i)]-6

    df["MWTP{}".format(i)] = np.select([m1,m2],[a,b], default=c)

8
задан victorz 6 October 2008 в 15:47
поделиться

4 ответа

Простой пример:

import os
chidren = []
for job in jobs:
    child = os.fork()
    if child:
        children.append(child)
    else:
        pass  # really should exec the job
for child in children:
    os.waitpid(child, 0)

Таймаут медленного ребенка является немного большим количеством работы; можно использовать wait вместо waitpid, и отберите возвращаемый значения из списка детей, вместо того, чтобы ожидать на каждом в свою очередь (как здесь). Если Вы настраиваете alarm с a SIGALRM обработчик, можно завершить ожидание после указанной задержки. Это - весь стандартный материал UNIX, не определенный для Python...

11
ответ дан 5 December 2019 в 08:55
поделиться

Ephemient: каждый ребенок в Вашем коде останется дома для цикла после того, как его задание закончится. Он разветвится снова и снова. Кроме того, дети, которые запускаются, когда дети [] не пусто, попытаются ожидать некоторых своих братьев в конце цикла. В конечном счете кто-то откажет. Это - обходное решение:

import os, time

def doTheJob(job):
    for i in xrange(10):
        print job, i
        time.sleep(0.01*ord(os.urandom(1)))
        # random.random() would be the same for each process

jobs = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
imTheFather = True
children = []

for job in jobs:
    child = os.fork()
    if child:
        children.append(child)
    else:
        imTheFather = False
        doTheJob(job)
        break

# in the meanwhile 
# ps aux|grep python|grep -v grep|wc -l == 11 == 10 children + the father

if imTheFather:
    for child in children:
        os.waitpid(child, 0)
5
ответ дан 5 December 2019 в 08:55
поделиться

Вы посмотрели на pyprocessing модуль?

2
ответ дан 5 December 2019 в 08:55
поделиться

Традиционный, UNIX-y способ общаться с подпроцессами должен открыть каналы для их стандартного ввода/вывода и использовать select() системный вызов для мультиплексирования связи в родительском процессе (доступный в Python через... select модуль).

Если необходимо уничтожить медленно рабочий дочерний процесс, можно просто сохранить его идентификатор процесса (возвращенный os.fork() звоните), и затем используйте os.kill() уничтожить его при отсутствии необходимости больше. Конечно, это, вероятно, было бы более чисто, чтобы смочь общаться с дочерним процессом явно и сказать этому завершать работу себя.

1
ответ дан 5 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

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