免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9673 | 回复: 11
打印 上一主题 下一主题

python线程HelloWorld [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-03 09:26 |只看该作者 |倒序浏览
改变num的值可以控制线程的数量
弄它几千个不是问题
呵呵
每个线程启动后会随机睡眠1-3秒
醒来后结束


  1. #!/usr/bin/env python
  2. import threading
  3. import time
  4. import random

  5. class PrintThread(threading.Thread):
  6.     def __init__(self, threadName):
  7.         threading.Thread.__init__(self, name = threadName)
  8.         self.sleepTime = random.randint(1,3)
  9.         print "Name: %s; sleep: %d" % (self.getName(), self.sleepTime)

  10.     def run(self):
  11.         print "%s going to sleep for %s second(s)"\
  12.               % (self.getName(), self.sleepTime)
  13.         time.sleep(self.sleepTime)
  14.         print self.getName(), 'done sleeping'

  15. num=10
  16. threadList=[]
  17. for i in range(1,num+1):
  18.     thread = PrintThread('thread'+str(i))
  19.     threadList.append(thread)

  20. print '\nStarting threads'

  21. for i in threadList:
  22.     i.start()

  23. print 'All threads started\n'

  24. for i in threadList:
  25.     i.join()

  26. print 'All threads stoped\n'
复制代码

论坛徽章:
0
2 [报告]
发表于 2005-06-03 09:29 |只看该作者

python线程HelloWorld

线程同步可以用锁
现在让我们一起回到遥远的DOS时代
还是上面的程序
但是每一时刻只有一个线程可以工作
只是增加了三行代码而已


  1. #!/usr/bin/env python
  2. import threading
  3. import time
  4. import random

  5. class PrintThread(threading.Thread):
  6.     def __init__(self, threadName):
  7.         threading.Thread.__init__(self, name = threadName)
  8.         self.sleepTime = random.randint(1,3)
  9.         print "Name: %s; sleep: %d" % (self.getName(), self.sleepTime)

  10.     def run(self):
  11.         lock.acquire()        #add this
  12.         print "%s going to sleep for %s second(s)"\
  13.               % (self.getName(), self.sleepTime)
  14.         time.sleep(self.sleepTime)
  15.         print self.getName(), 'done sleeping'
  16.         lock.release()        #add this

  17. num=10
  18. threadList=[]
  19. lock=threading.RLock()        #add this
  20. for i in range(1,num+1):
  21.     thread = PrintThread('thread'+str(i))
  22.     threadList.append(thread)

  23. print '\nStarting threads'

  24. for i in threadList:
  25.     i.start()

  26. print 'All threads started\n'

  27. for i in threadList:
  28.     i.join()

  29. print 'All threads stoped\n'
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-06-07 10:52 |只看该作者

python线程HelloWorld

小弟新手,只想问一下,程序中的run()函数是何时被调用的,是在执行i.start()的时候吗?

论坛徽章:
0
4 [报告]
发表于 2005-06-07 14:04 |只看该作者

python线程HelloWorld

yes
你要是把run改成run2就不执行了
可见start会调用run

论坛徽章:
0
5 [报告]
发表于 2005-06-09 11:39 |只看该作者

python线程HelloWorld

线程是自动结束还是 通过join来结束的?

能否让线程持久运行?

论坛徽章:
0
6 [报告]
发表于 2005-06-09 11:55 |只看该作者

python线程HelloWorld

不是通过join来结束的,如果PrintThread.run没有运行完,线程当然不会结束。你可以循环或者回调来保证程序的运行。

论坛徽章:
0
7 [报告]
发表于 2005-06-09 13:17 |只看该作者

python线程HelloWorld

曾经有个高手告诉我python的线程不需要显示的调用join
线程的代码完了线程自己就结束了
无须理会

我觉得这个问题还是需要有高手站出来讲讲
python-thread的join和pthread的到底有什么差别

论坛徽章:
0
8 [报告]
发表于 2005-06-09 14:17 |只看该作者

python线程HelloWorld

python-thread的join和pthread的到底有什么差别,这个问题我不懂!

论坛徽章:
0
9 [报告]
发表于 2005-06-09 15:42 |只看该作者

python线程HelloWorld

是我问的不好不好意思

我记得pthread里
主线程join子线程的时候是可以让子线程传递一些数据回来
那么python的thread是否也可以做到呢

论坛徽章:
0
10 [报告]
发表于 2005-06-10 08:50 |只看该作者

python线程HelloWorld

这个我没有找到相关资料,我通常的做法是在线程中操作共享变量来实现的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP