python 多线程 和 多进程

单线程例子:

 

#!/usr/bin/python
# -*- coding:UTF-8 -*-

# Name: danxiancheng.py

import time
import threading

def loop(num,sec):
    print 'loop %s start: ....' % num, time.strftime('%Y-%M-%d %H:%m:%S')
    time.sleep(sec)
    print 'loop %s stop: .....' % num, time.strftime('%Y-%M-%d %H:%m:%S')
 

def main():
    print '\nStarting: ........', time.strftime('%Y-%M-%d %H:%m:%S'), '\n'
    mysec = [3,5,6,8]
    for i in range(len(mysec)):
        loop(i,mysec[i])
    print '\nAll DONE: ........', time.strftime('%Y-%M-%d %H:%m:%S'), '\n'

if __name__=='__main__':
    main()
 

打印结果:

 

[root@xhu_node3 ~]# python singlethread.py

Starting: ........ 2012-33-27 05:12:12

loop 0 start: .... 2012-33-27 05:12:12
loop 0 stop: ..... 2012-33-27 05:12:15
loop 1 start: .... 2012-33-27 05:12:15
loop 1 stop: ..... 2012-33-27 05:12:20
loop 2 start: .... 2012-33-27 05:12:20
loop 2 stop: ..... 2012-33-27 05:12:26
loop 3 start: .... 2012-33-27 05:12:26
loop 3 stop: ..... 2012-33-27 05:12:34

All DONE: ........ 2012-33-27 05:12:34

[root@xhu_node3 ~]#

 

 

多线程的例子:

 

#!/usr/bin/python
# -*- coding:UTF-8 -*-

# Name: duoxiancheng.py

import time
import threading

def loop(num,sec):
    print 'loop %s start: ....' % num, time.strftime('%Y-%M-%d %H:%m:%S')
    time.sleep(sec)
    print 'loop %s stop: .....' % num, time.strftime('%Y-%M-%d %H:%m:%S')
 

def main():
    print '\nStarting: ........', time.strftime('%Y-%M-%d %H:%m:%S'), '\n'
    mysec = [3,5,6,8]
    mythreads = [threading.Thread(target=loop,args=(i,mysec[i])) for i in range(len(mysec))]

    for i in mythreads:
        i.start()
    for i in mythreads:
        i.join()
    print '\nAll DONE: ........', time.strftime('%Y-%M-%d %H:%m:%S'), '\n'

if __name__=='__main__':
    main()
 

 

 

执行结果:

 

[root@xhu_node3 ~]# python mutithread.py

Starting: ........ 2012-36-27 05:12:19

loop 0 start: .... 2012-36-27 05:12:19
loop 1 start: .... 2012-36-27 05:12:19
loop 2 start: .... 2012-36-27 05:12:19
loop 3 start: .... 2012-36-27 05:12:19
loop 0 stop: ..... 2012-36-27 05:12:22
loop 1 stop: ..... 2012-36-27 05:12:24
loop 2 stop: ..... 2012-36-27 05:12:25
loop 3 stop: ..... 2012-36-27 05:12:27

All DONE: ........ 2012-36-27 05:12:27

 

结论:

可以看到单线程中的两个循环, 只有一个循环结束后另一个才开始。而多线程则是进程内所有线程一起执行,同步任务。

首先创建了n个线程,并将其存放到mythreads列表中,这里用到的是给Thread类传递了函数,第一个for循环是让两个线程开始执行。第二个for循环再让每个线程分别调用join函数,使程序挂起,直至相应线程都执行结束。

 

 

 

多进程例子:

 

test.py

 

#!/usr/bin/python

import time
import os  
from os import environ 



class MyClass:
    def __init__(self):
        self.aa = 1

    def getA(self):
        return environ['FOO'] 

    def subA(self):
        self.aa += 1


if __name__ == '__main__':
    pass
 

 

pro.py

 

#!/usr/bin/python
import os
import sys
import time, datetime, traceback
from os import environ
from multiprocessing import Process
from test import MyClass

def create_compute(hostname):
        try:
            environ['FOO'] = hostname
            a = MyClass()
            print a.getA()
        except Exception as e:
            print e
            traceback.print_exc()

if __name__ == '__main__':
    plist = []
    for i in 4,5:
        p = Process(target = create_compute, args = ('node'+str(i),)) 
        plist.append(p);  
        p.start()
    for p in plist:  
        p.join()
 

 

执行结果:

 

[root@xhu_node3 ~]# python pro.py
node4
node5
[root@xhu_node3 ~]#

 

结论:

 

 两个进程中设置的环境变量 互不影响

 

多进程:


多线程:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值