Как использовать openurl & multiprocessing для получения URL разных данных в одно и то же время? - PullRequest
2 голосов
/ 12 мая 2011

Этот цикл помогает получить некоторые текстовые данные из веб-службы:

while True:
    u = urllib2.urlopen('http://url/%d.csv' %inputd)
    f=open('/folder/%s.csv' $inputd,'a')
    csvread = csv.reader(u)
    csvwrite = csv.writer(f)
    csvwrite.writerows(csvread)
    print 'OK','%e'%inputd
    time.sleep(30)

Теперь я пытаюсь получить разные заголовки данных одновременно, используя многопроцессорность:

import multiprocessing as mp
import urllib2,csv,random,logging,csv,time

inputd=(abc,def,ghi)

def dataget():
    u = urllib2.urlopen('http://url/%d.csv' %inputd)
    f=open('/folder/%s.csv' $inputd,'a')
    csvread = csv.reader(u)
    csvwrite = csv.writer(f)
    csvwrite.writerows(csvread)
    print 'OK','%e' % inputd
    time.sleep(30)

process=[]
for s in inputd:
    p = mp.Process(target=dataget) 
    ps.append(p)
    p.start()

Я надеюсь, что это может сделать получение и сохранение "http://url/abc.csv";" http://url/def.csv"; "http://url/ghi.csv" одновременно, а затем повторно сделать это после time.sleep. Но это не работает, или не тот же процесс в то же время, какую логическую ошибку я совершил?

1 Ответ

3 голосов
/ 12 мая 2011

Ваша многопроцессорная реализация выполнит захват URL только один раз. Если вы хотите, чтобы ваш набор данных делал вещи снова и снова, вы пропустили While True.

Может быть, так будет работать:

import multiprocessing as mp
import urllib2,csv,random,logging,csv,time

inputd=(abc,def,ghi)

def dataget(param):
    while True:
        u = urllib2.urlopen('http://url/%d.csv' %param)
        f=open('/folder/%s.csv' %param,'a')
        csvread = csv.reader(u)
        csvwrite = csv.writer(f)
        csvwrite.writerows(csvread)
        print 'OK','%e'%param
        time.sleep(30)

process=[]
for s in inputd:
    p = mp.Process(target=dataget, args=(s,)) 
    process.append(p)
    p.start()
...