Python多进程与MySQL
我在网上查了很多资料,但还是找不到适合我需求的解决方案 :(
我有一个MySQL数据库,里面有一个表存储了超过10,000个电子邮件地址。
我想每5分钟对这些地址进行一次批处理操作。
我觉得用Python来从MySQL获取结果,然后用这些电子邮件地址作为参数调用命令行是个不错的选择。
我该怎么做才是最好的方式呢?我在想先从MySQL获取所有的结果集,然后让一群工作程序调用命令行,直到所有的电子邮件地址都处理完。这样能简单又稳定地实现吗?
2 个回答
0
如果你不想使用ORM模块,可以把邮件信息存到一个CSV文件里:
SELECT name, address
FROM email
INTO OUTFILE '/tmp/emails.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
然后可以用Python对这个CSV文件进行后续处理:
import csv
data = csv.reader(open('/tmp/emails.csv', 'rb'), delimiter=',')
for row in data:
name, address = row
print '%s <%s>' % (name, address)
CSV文件的读写:http://docs.python.org/library/csv.html
如果你处理的是非常大的文件,建议使用file.readlines()这个函数,这样可以避免Python把整个文件都读到内存里:
with open('/tmp/emails.csv', 'rb') as f:
for line in f.readlines():
name, address = line.split(',')
print '%s <%s>' % (name, address)
0
你可以像这样使用多进程模块:
from multiprocessing import Pool
p = Pool() # let python choose the optimal number of processes (= number of CPU cores)
def treat_email(email_adress):
# do the stuff you need with email address
email_addresses = grab_the_list_from_mysql() # something like "select mail from my_user_table"
p.map(treat_email, email_addresses) # this will treat all the emails in the X processes