Python多线程循环

背景:Python脚本:读取文件中每行,放入列表中;循环读取列表中的每个元素,并做处理操作。

核心:多线程处理单个for循环函数调用

模块:threading

第一部分:

:多线程脚本 (该脚本只有两个线程,t1循环次数<t2)

#!/usr/bin/env python
#-*- coding: utf8 -*-

import sys
import time
import string
import threading
import datetime
fileinfo = sys.argv[1]

# 读取文件内容放入列表
host_list = []
port_list = []

# 定义函数:读取文件内容放入列表中
def CreateList():
    f = file(fileinfo,‘r‘)
    for line in f.readlines():
        host_list.append(line.split(‘ ‘)[0])
        port_list.append(line.split(‘ ‘)[1])
    return host_list
    return port_list
    f.close()

# 单线程 循环函数,注释掉了
#def CreateInfo():
#    for i in range(0,len(host_list)):     # 单线程:直接循环列表
#        time.sleep(1)
#        TimeMark = datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)
#        print "The Server‘s HostName is %-15s and Port is %-4d !!! [%s]" % (host_list[i],int(port_list[i]),TimeMark)
#    

#  定义多线程循环调用函数
def MainRange(start,stop):     #提供列表index起始位置参数
    for i in range(start,stop):
        time.sleep(1)
        TimeMark = datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S‘)
        print "The Server‘s HostName is %-15s and Port is %-4d !!! [%s]" % (host_list[i],int(port_list[i]),TimeMark)

# 执行函数,生成列表
CreateList()
# 列表分割成:两部分 mid为列表的index中间位置
mid = int(len(host_list)/2)

# 多线程部分
threads = []
t1 = threading.Thread(target=MainRange,args=(0,mid))
threads.append(t1)
t2 = threading.Thread(target=MainRange,args=(mid,len(host_list)))
threads.append(t2)

for t in threads:
    t.setDaemon(True)
    t.start()
t.join()
print "ok"

以上是脚本内容!!!

----------------------------------------------------------------------

:读取文件的内容

文件内容:

[[email protected] logdb]# cat hostinfo.txt
192.168.10.11 1011
192.168.10.12 1012
192.168.10.13 1013
192.168.10.14 1014
192.168.10.15 1015
192.168.10.16 1016
192.168.10.17 1017
192.168.10.18 1018
192.168.10.19 1019
192.168.10.20 1020
192.168.10.21 1021
192.168.10.22 1022
192.168.10.23 1023
192.168.10.24 1024
192.168.10.25 1025

:输出结果:

单线程 : 执行脚本:输出结果:

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
The Server‘s HostName is 192.168.10.10   and Port is 1010 !!! [2017-01-10 14:25:14]
The Server‘s HostName is 192.168.10.11   and Port is 1011 !!! [2017-01-10 14:25:15]
The Server‘s HostName is 192.168.10.12   and Port is 1012 !!! [2017-01-10 14:25:16]
     .

.

.
The Server‘s HostName is 192.168.10.25   and Port is 1025 !!! [2017-01-10 14:25:29]

多线程:执行脚本:输出 结果

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
The Server‘s HostName is 192.168.10.11 and Port is 1011 !!! [2017-01-10 14:51:51]
The Server‘s HostName is 192.168.10.18 and Port is 1018 !!! [2017-01-10 14:51:51]
The Server‘s HostName is 192.168.10.12 and Port is 1012 !!! [2017-01-10 14:51:52]
The Server‘s HostName is 192.168.10.19 and Port is 1019 !!! [2017-01-10 14:51:52]
The Server‘s HostName is 192.168.10.13 and Port is 1013 !!! [2017-01-10 14:51:53]
The Server‘s HostName is 192.168.10.20 and Port is 1020 !!! [2017-01-10 14:51:53]
The Server‘s HostName is 192.168.10.14 and Port is 1014 !!! [2017-01-10 14:51:54]
The Server‘s HostName is 192.168.10.21 and Port is 1021 !!! [2017-01-10 14:51:54]
The Server‘s HostName is 192.168.10.15 and Port is 1015 !!! [2017-01-10 14:51:55]
The Server‘s HostName is 192.168.10.22 and Port is 1022 !!! [2017-01-10 14:51:55]
The Server‘s HostName is 192.168.10.16 and Port is 1016 !!! [2017-01-10 14:51:56]
The Server‘s HostName is 192.168.10.23 and Port is 1023 !!! [2017-01-10 14:51:56]
The Server‘s HostName is 192.168.10.17 and Port is 1017 !!! [2017-01-10 14:51:57]
The Server‘s HostName is 192.168.10.24 and Port is 1024 !!! [2017-01-10 14:51:57]
The Server‘s HostName is 192.168.10.25 and Port is 1025 !!! [2017-01-10 14:51:58]

==================================以上部分完结===正确=========

=====经过调试出现新的问题======================================

第二部分:延伸问题

总结:以上运行结果没有问题!!!(但是调整参数:start,stop之后有问题:MainRange(start,stop))

首先说明下两个概念问题:

  join():

    1.方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程(主进程指:本脚本中的print “OK”)。

    2.可以理解成:t.join() 的t线程执行完之后,再继续执行后面的!!!(本脚本中的t.join(),是指t2线程)

    可参考:

      for i in range(0,4):

        pass

      print i

      结果输出:3. 也就是for循环的最后一个i. 放在本脚本里,就是for循环的最后一个线程t2。然后t2完成之后,就是:print “OK”

        

  setDaemon(True):

    1.将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。

    2.换句话说:开启,子线程不会挂起,主线程执行了,子线程及时没执行完也会中断:比如本脚本里如果:t1>t2

===========解析=============================================================

重新编写输出文件内容:

[[email protected] logdb]# cat hostinfo.txt
192.168.10.00 0
192.168.10.01 1
192.168.10.02 2
192.168.10.03 3
192.168.10.04 4
192.168.10.05 5
192.168.10.06 6
192.168.10.07 7
192.168.10.08 8
192.168.10.09 9
192.168.10.10 10
192.168.10.11 11
192.168.10.12 12
192.168.10.13 13
192.168.10.14 14

原文脚本中:

for t in threads:
    t.setDaemon(True)
    t.start()
t.join()
print "ok" 

分类解析:

基于原文脚本:

1. 以上基于线程执行次数:t1 <= t2  运行结果:正确

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 19:08:44],
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:08:44],
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 19:08:45],
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:08:45],
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 19:08:46],
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:08:46],
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 19:08:47],
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:08:47],
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 19:08:48],
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:08:48],
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 19:08:49],
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:08:49],
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 19:08:50],
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 19:08:50],
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 19:08:51],
ok

  解析:开启setDaemon(True),t1,t2同时依次执行,[t1,t2],[t1,t2],[t1,t2],[t1,t2],[t1,t2] . . . . . .[t1,t2], 下次循环t1结束,t2再执行一次,[,t2],再下次,t2结束。t.join()==t2.join() 完成任务,继续执行主进程print “ok”

2.基于脚本中线程次数t1>t2,运行结果:错误

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
t1: (0~13)
t2: (7~15)
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 19:18:58],
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:18:58],
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 19:18:59],
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:18:59],
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 19:19:00],
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:19:00],
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 19:19:01],
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:19:01],
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 19:19:02],
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:19:02],
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:19:03],
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 19:19:03],
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 19:19:04],
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 19:19:04],
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:19:05],
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 19:19:05],
ok

  解析:t1,t2同时依次执行,t1>t2,当t2执行最后一次时,t.join()===t2.join(),t.join()完成任务,执行主程序print "ok",由于:开启setDaemon(True),t1,t2均不会被挂起,主程序结束,子程序即使没有执行完,也结束。如上述结果。

  t2执行8次结束,t1也执行8次循环结束。

开启:t.setDaemon(True):不会挂起,顺序执行

1.脚本如下:

for t in threads:

  t.setDaemon(True)

  t.start()

  t.join()   #在for循环里面

print "ok"

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
t1: (0~13)
t2: (7~15)
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 19:30:56]
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 19:30:57]
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 19:30:58]
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 19:30:59]
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 19:31:00]
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 19:31:01]
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 19:31:02]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:31:03]
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:31:04]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:31:05]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:31:06]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:31:07]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:31:08]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:31:09]
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:31:10]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:31:11]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:31:12]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:31:13]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:31:14]
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 19:31:15]
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 19:31:16]
ok

  :解析:t.join()在for循环里面,t1.join()等待t1执行13次循环完毕;然后才执行t2,t2.join()等待t2循环执行8次;然后执行主线程print"ok"

   :如上述结果:t1先执行完,再执行t2

  :t1,t2大小无所谓,多线程没有效果

关闭:t.setDaemon(True) :线程会挂起

1.脚本如下:

for t in threads:

#  t.setDaemon(True)

  t.start()

  t.join()   #在for循环里面

print "ok"

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
t1: (0~13)
t2: (7~15)
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 19:37:11]
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 19:37:12]
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 19:37:13]
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 19:37:14]
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 19:37:15]
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 19:37:16]
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 19:37:17]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:37:18]
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:37:19]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:37:20]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:37:21]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:37:22]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:37:23]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:37:24]
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:37:25]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:37:26]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:37:27]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:37:28]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:37:29]
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 19:37:30]
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 19:37:31]
ok

  解析:由于t.join()在循环里面,所以:t1线程执行完,才执行t2.是顺序执行的

  t1,t2大小无所谓,多线程没有效果

2.脚本如下:

for t in threads:

#  t.setDaemon(True)

  t.start()

t.join()   #在for循环外面

print "ok"

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
t1: (0~13)
t2: (7~15)
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 19:40:31]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:40:31]
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 19:40:32]
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:40:32]
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 19:40:33]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:40:33]
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 19:40:34]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:40:34]
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 19:40:35]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:40:35]
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 19:40:36]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:40:36]
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 19:40:37]
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 19:40:37]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 19:40:38]
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 19:40:38]
ok
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 19:40:39]
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 19:40:40]
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 19:40:41]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 19:40:42]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 19:40:43]

  解析:t.join()在循环外面t.join()==t2.join(),

  过程:t1>t2. 开始:同时执行。当t2执行8次循环完毕,t1也执行了8次。此时t2完毕,t.join()生效,会执行主进程print "ok". 主进程完毕。

    由于,关闭:t.setDaemon(True),未执行完毕的t1先前被挂起,接下来会继续,直到结束。如上述结果

  t1<t2 就不会出现这种情况了。多线程是有效的。但是主线程的输出位置,错误!!

=============解决方法================================

解决方式:

1.只有两个线程时

修改原脚本:临时解决t1>t2

for t in threads:

  t.setDaemon(True)

 t.start()  

threads[0].join()   #指定t1,结束

print "ok"

  解析:通过threads[0] 指定t1.join() ,等t1完成了,才执行主程序

2.多个线程时 也适用

for t in threads:

  t.start()

for t in threads:

  t.join()

print "ok"

  解析:多个线程都等待,等所有都完成之后。才执行主线程print "ok"

3.事例:3个线程

[[email protected] logdb]# ./Threadfor.py hostinfo.txt
t1: (0~4)  循环4次
t2: (4~11) 循环7次

t3: (11~15) 循环4次
The Server‘s HostName is 192.168.10.00   and Port is 00 !!! [2017-01-10 20:07:31]
The Server‘s HostName is 192.168.10.04   and Port is 04 !!! [2017-01-10 20:07:31]
The Server‘s HostName is 192.168.10.11   and Port is 11 !!! [2017-01-10 20:07:31]   1次
The Server‘s HostName is 192.168.10.01   and Port is 01 !!! [2017-01-10 20:07:32]
The Server‘s HostName is 192.168.10.05   and Port is 05 !!! [2017-01-10 20:07:32]
The Server‘s HostName is 192.168.10.12   and Port is 12 !!! [2017-01-10 20:07:32]  2次
The Server‘s HostName is 192.168.10.02   and Port is 02 !!! [2017-01-10 20:07:33]
The Server‘s HostName is 192.168.10.06   and Port is 06 !!! [2017-01-10 20:07:33]
The Server‘s HostName is 192.168.10.13   and Port is 13 !!! [2017-01-10 20:07:33]  3次
The Server‘s HostName is 192.168.10.03   and Port is 03 !!! [2017-01-10 20:07:34]
The Server‘s HostName is 192.168.10.07   and Port is 07 !!! [2017-01-10 20:07:34]
The Server‘s HostName is 192.168.10.14   and Port is 14 !!! [2017-01-10 20:07:34]  4次
The Server‘s HostName is 192.168.10.08   and Port is 08 !!! [2017-01-10 20:07:35]  5次
The Server‘s HostName is 192.168.10.09   and Port is 09 !!! [2017-01-10 20:07:36]  6次
The Server‘s HostName is 192.168.10.10   and Port is 10 !!! [2017-01-10 20:07:37]  7次
ok

时间: 2024-08-08 13:56:49

Python多线程循环的相关文章

python 多线程实现循环打印 abc

python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global value global lock global stop_flag while stop_flag: while True: if value == 0 or value == 3: break lock.acquire() value = 1 time.sleep(1) print("aaa&q

python多线程、多进程以及GIL

多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调用start()方法,即开始运行该线程,该线程将执行函数func,当然,如果func需要参数,可以在Thread的构造函数中传入参数args=(-).示例代码如下 import threading #用于线程执行的函数 def counter(n): cnt = 0; for i in xrange

Python多线程(threading)学习总结

注:此文除了例子和使用心得是自己写的,很多都是Python核心编程中的原文.原文文风应该能看出来,就不每个地方单独表明出处了. 线程(有时被称为轻量级进程)跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享相同的运行环境.它们可以想像成是在主进程或"主线程"中并行运行的"迷你进程". 线程有开始,顺序执行和结束三部分.它有一个自己的指令指针,记录自己运行到什么地方.线程的运行可能被抢占(中断),或暂时的被挂起(也叫睡眠),让其它的线程运行,这叫做让步.一个

python 多线程探索

前面已经了解过了,python多线程效率较低的主要原因是存在GIL,即Global Interpreter Lock(全局解释器锁).这里继续详细的看下GIL的说明与如何避免GIL的影响,从而提高python多线程的执行效率.什么是GIL首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码.有名的编译器例如GCC,INTEL C++,Visual C++等

python多线程-threading模块

threading 是我们常用的用于 python 多线程的模块,其功能更加丰富.下面我们就来开始学习这个模块. 同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异. 老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容. threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的.thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行.

Python多线程和多进程谁更快?

python多进程和多线程谁更快 python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为GIL(全局解释器锁).但是我在写代码的时候,测试时间却是多线程更快,所以这到底是怎么回事?最近再做分词工作,原来的代码速度太慢,想提速,所以来探求一下有效方法(文末有代码和效果图) 这里先来一张程序的结果图,说明线程和进程谁更快 一些定义 并行是指两个或者多个事件

Python 多线程教程:并发与并行

Python 多线程教程:并发与并行 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看

【跟我一起学Python吧】Python 多线程

其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活.在早期的Python多线程实现中,采用了thread模块.例如: Python代码   from time import ctime,sleep from thread import start_new_thread def loop1(): print "enter loop1:",ctime(); sleep(3); print "leave loop1:",ctime(

Python 多线程就这么简单

来源:Linux社区  作者:StitchSun 多线程和多进程是什么自行google补脑 对于Python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序. (好吧!我们不纠结在DOS时代是否有听音乐和看影的应用.^_^) 1 from time import ctime,sleep 2 3 def m