我正在尝试在我的处理器的多个线程上运行此Python代码,但我找不到如何分配多个线程。 我在Jupyter(以前是IPython)中使用python 2.7。
以下是初始代码(所有这部分都完美地工作)。 它是一个Web解析器,它获取x
,即我的列表中的url之一,即url列表,然后编写CSV(其中out_string是一行)。
没有多线程的代码
my_list = ['http://stackoverflow.com/', 'http://google.com']
def main():
with open('Extract.csv'), 'w') as out_file:
count_loop = 0
for x in my_list:
#================ Get title ==================#
out_string = ""
campaign = parseCampaign(x)
out_string += ';' + str(campaign.getTitle())
#================ Get Profile ==================#
if campaign.getTitle() != 'NA':
creator = parseCreator(campaign.getCreatorUrl())
out_string += ';' + str(creator.getCreatorProfileLinkUrl())
else:
pass
#================ Write ==================#
out_string += '\n'
out_file.write(out_string)
count_loop +=1
print '---- %s on %s ------- ' %(count_loop, len(my_list))
使用多线程编码但不起作用
from threading import Thread
my_list = ['http://stackoverflow.com/', 'http://google.com']
def main(x):
with open('Extract.csv'), 'w') as out_file:
count_loop = 0
for x in my_list:
#================ Get title ==================#
out_string = ""
campaign = parseCampaign(x)
out_string += ';' + str(campaign.getTitle())
#================ Get Profile ==================#
if campaign.getTitle() != 'NA':
creator = parseCreator(campaign.getCreatorUrl())
out_string += ';' + str(creator.getCreatorProfileLinkUrl())
else:
pass
#================ Write ==================#
out_string += '\n'
out_file.write(out_string)
count_loop +=1
print '---- %s on %s ------- ' %(count_loop, len(my_list))
for x in my_list:
t = Thread(target=main, args=(x,))
t.start()
t2 = Thread(target=main, args=(x,))
t2.start()
我找不到一个好方法来实现多线程运行这段代码,而且由于文档不太容易理解,所以我有点困惑。在一个内核的情况下,这个代码需要花费2个小时,使用多线程将节省我很多时间!
multiprocessing
或asyncio
进行尝试。 - B. M.