如何使用openurl和多进程同时获取不同URL的数据?
这个循环的作用是从网络服务获取一些文本数据:
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
你的多进程实现只会抓取一次网址。如果你想让你的数据获取一直重复这个过程,你需要加上 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()