Python网络爬虫实战--示例3.7多线程--在Windows系统上的实现

《Python网路爬虫实战》一书上的源代码虽然都是在Linux系统下编写的,但对于Windows系统,大部分代码依然可以很好的运行,但由于系统差异的原因,在少数情况下还是出现不能运行的情况。


在第三章讲到用多线程方式输出的时候,课本的源代码如下:
#!/usr/bin/env python3
#-- coding:utf-8 --

import time
import threading

#多线程
def showName(threadNum,name):
nowtime = time.strftime(’%H:%M:%S’,time.localtime(time.time()))
print(‘i am thread-%d, My name is function-%s, now tiem: %s’ %(threadNum,name,nowtime))
time.sleep(1)

if name == “main”:

print("i am main ...")
names = range(20)
'''
print(names)
name = names.pop()
print(name)
'''
threadNum = 1 #是指 线程执行的批次
threadPool = []
while names:
	for i in range(6):
		try:
			name = names.pop()
		except IndexError as e:
			print('The list is empty')
			break
		
		else:
			t = threading.Thread(target=showName,args=(i,name, ))
		
		threadPool.append(t)
		t.start()
		
	while threadPool:
		t = threadPool.pop()
		t.join()
		
	threadNum += 1
print("main is over")

相信很多人在Windows系统下运行会出现bug,如图所示
在这里插入图片描述
说明names = range(20)这一句出现问题。
而我们知道,在Python3中整合了range()方法,在这里原本是想定义names为一个有20个元素的列表。返回结果显示names的属性不是一个列表,不能使用pop()方法。我们试着输出names的类型。得到如下结果:
在这里插入图片描述
返回的range(0,20)的类型并不是一个列表,修改方式为
names = list(range(20))
让names是一个列表类型。这样处理之后,就能正常运行,得到的names的类型为一个list,结果正常。
在这里插入图片描述
**另外一定要注意,不要讲文件名定义为什么threading.py与要导入的库名字重复造成错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值