Ожидайте конец подпроцессов с несколькими параллельными заданиями

Используйте агрегатную функцию sum и group by поле Products_ID, например :

select t.orderid, t.products_id, sum(t.quantity*t.[unit price]) as price
from YourTable t
group by t.orderid, t.products_id

Измените YourTable на свое имя таблицы.

12
задан Ruggero Turra 8 November 2011 в 19:36
поделиться

4 ответа

Я думаю, что ответ не находится в коде Python или функциях языка, но это находится в системных возможностях, рассмотрите это решение:

runcodes = ["script1.C", "script2.C"]

Args = []
for script in runcodes:
    Args += " ".join(["root", "-l", "-q", script])


P = subprocess.Popen(" & ".join(Args))
P.wait()
0
ответ дан 2 December 2019 в 06:07
поделиться

Если ваша платформа не Windows, вы, вероятно, могли бы выбрать против stdout труб ваших подпроцессов. Тогда ваше приложение будет блокироваться до тех пор, пока либо:

  • У одного из зарегистрированных файловых дескрипторов не произойдет событие ввода-вывода (в данном случае нас интересует зависание на stdout-трубе подпроцесса)
  • Опрос завершится

Неполный пример использования epoll в Linux 2.6.xx:

import subprocess
import select

poller = select.epoll()
subprocs = {} #map stdout pipe's file descriptor to the Popen object

#spawn some processes
for i in xrange(5):
    subproc = subprocess.Popen(["mylongrunningproc"], stdout=subprocess.PIPE)
    subprocs[subproc.stdout.fileno()] = subproc
    poller.register(subproc.stdout, select.EPOLLHUP)

#loop that polls until completion
while True:
    for fd, flags in poller.poll(timeout=1): #never more than a second without a UI update
        done_proc = subprocs[fd]
        poller.unregister(fd)
        print "this proc is done! blah blah blah"
        ...  #do whatever
    #print a reassuring spinning progress widget
    ...
    #don't forget to break when all are done
9
ответ дан 2 December 2019 в 06:07
поделиться

Вы можете сделать что-то вроде этого:

runcodes = ["script1.C", "script2.C"]

ps = []
for script in runcodes:
    args = ["root", "-l", "-q", script]
    p = subprocess.Popen(args)
    ps.append(p)

for p in ps:
    p.wait()

Процессы будут выполняться параллельно, и вы будете ждать их всех в конце.

9
ответ дан 2 December 2019 в 06:07
поделиться

Как насчет

import os, subprocess
runcodes = ["script1.C", "script2.C"]
ps = {}
for script in runcodes:
    args = ["root", "-l", "-q", script]
    p = subprocess.Popen(args)
    ps[p.pid] = p
print "Waiting for %d processes..." % len(ps)
while ps:
    pid, status = os.wait()
    if pid in ps:
        del ps[pid]
        print "Waiting for %d processes..." % len(ps)
7
ответ дан 2 December 2019 в 06:07
поделиться
Другие вопросы по тегам:

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