payton24
发表于 2018-2-9 11:11:26
°蓝鲤歌蓝 发表于 2018-2-9 10:48
不客气,你刚刚发的多线程join()用法的帖子,穷刚刚看了,也测试过,
后面2种正确方法比错误示范要快。
终于清理完零散知识了,开干,你稍等。
payton24
发表于 2018-2-9 12:07:56
给你两组数据:
1.单线程 耗时 4.825276136398315
2.多线程 耗时 2.750157356262207
如果获取页数多一些,节省时间应该更可观。
自荐一下新出炉的帖子{:10_279:}:
http://bbs.fishc.com/forum.php?mod=viewthread&tid=105052&page=1&extra=#pid3207147
payton24
发表于 2018-2-9 16:37:48
多进程碰到问题了,凡是子线程的print语句都运行不了,我用的是win7。
请问你用的是什么操作系统,能打印出子进程的语句吗?
°蓝鲤歌蓝
发表于 2018-2-9 17:45:12
payton24 发表于 2018-2-9 16:37
多进程碰到问题了,凡是子线程的print语句都运行不了,我用的是win7。
请问你用的是什么操作系统,能打印 ...
刚刚试过了,我的可以打印。win7 64位
payton24
发表于 2018-2-9 17:48:55
°蓝鲤歌蓝 发表于 2018-2-9 17:45
刚刚试过了,我的可以打印。win7 64位
{:10_266:}那设置跟我一样啊,我也是win7 64位,txt文档的输出倒是正常,但是打印语句一条也没有。
难道跟运行方式有关系?我用的是自带IDLE,请问你用的是什么运行的呢?
°蓝鲤歌蓝
发表于 2018-2-9 17:51:56
payton24 发表于 2018-2-9 17:48
那设置跟我一样啊,我也是win7 64位,txt文档的输出倒是正常,但是打印语句一条也没有。
难 ...
Pycharm,以前我用自带ide时也可以打印的。
°蓝鲤歌蓝
发表于 2018-2-9 17:55:41
°蓝鲤歌蓝 发表于 2018-2-9 17:51
Pycharm,以前我用自带ide时也可以打印的。
我这边不知道为什么测试时间老是 0.0 。
payton24
发表于 2018-2-9 17:58:37
好的,那我用pycharm也试试,tks
payton24
发表于 2018-2-9 18:13:55
°蓝鲤歌蓝 发表于 2018-2-9 17:55
我这边不知道为什么测试时间老是 0.0 。
我这边用了pycharm终于恢复正常了。你怎么测试时间的呢?发代码来看看。
我刚才用pycharm,测试时间也是正常的哦
°蓝鲤歌蓝
发表于 2018-2-9 18:27:10
payton24 发表于 2018-2-9 18:13
我这边用了pycharm终于恢复正常了。你怎么测试时间的呢?发代码来看看。
我刚才用pycharm,测试时间也 ...
不用发了,就是复制我多线程的。然后在最前面写个start,最后面写了个stop,然后相减。
我试了好几次,大多数是0.0,只有一次是0.015xxxxxxxxx。
payton24
发表于 2018-2-9 23:23:27
°蓝鲤歌蓝 发表于 2018-2-9 18:27
不用发了,就是复制我多线程的。然后在最前面写个start,最后面写了个stop,然后相减。
我试了好几次, ...
我在IDLE上测试多进程的时间是正常的,pycharm好像需要等一段时间才能结束。
payton24
发表于 2018-2-13 06:27:46
°蓝鲤歌蓝 发表于 2018-2-9 18:27
不用发了,就是复制我多线程的。然后在最前面写个start,最后面写了个stop,然后相减。
我试了好几次, ...
我今天又运行了一下,发现t1.start(),t2.start(), t3.start()后面都没有用t.join()。这样子测试时间,代码会直接运行完主程序,然后进程或线程的程序还会继续运行至结束为止。不信你可以在各个线程中加个print的测试代码,测试时间出来之后,各个子程序还在进行,所以这样运行效率不高,有可能比单线程耗时还要长。
不过我现在在多进程的顺序输出问题上卡住了,time.sleep()不好用。
°蓝鲤歌蓝
发表于 2018-2-13 10:28:11
payton24 发表于 2018-2-13 06:27
我今天又运行了一下,发现t1.start(),t2.start(), t3.start()后面都没有用t.join()。这样子测试时间,代 ...
是的,我之前测试的时间都是主线程运行的时间,所以才那么快。可是我在后面加上join()方法之后,测试时间一直打印不出来,程序也没有说运行完成,就好像子线程一直没有完成一样,主线程一直被堵塞。可是我的txt文档里都已经下载完毕了。
if __name__ == '__main__':
start = time.time()
url = 'https://movie.douban.com/top250'
count = 0
urlqueue = multiprocessing.Queue()
t1 = geturl(urlqueue, count, url)
t1.start()
# t1.join()
t2 = getcontent(urlqueue)
t2.start()
t1.join()
t2.join()
# t3 = contrl(urlqueue)
# t3.start()
stop = time.time()
print(stop-start)
chakyam
发表于 2018-4-21 21:08:34
看看
chakyam
发表于 2018-4-21 21:50:39
我还以为是一条线程爬1-25,51-75,101-125……
另外一条线程爬26-50,76-100,126-150……
这样{:10_250:}
zhou995287902
发表于 2018-7-5 16:38:12
{:5_106:}
lllxwb
发表于 2018-11-8 20:35:17
能不能写写协程。。。。
yuyiyi
发表于 2018-11-12 06:57:06
ilovefishc
考拉熊
发表于 2018-11-12 09:25:24
过来顶一下
四点好
发表于 2019-1-21 03:45:08
记号一下,下次学多线程的时候过来取经