为什么线程的参数有时会在Python中混淆?

时间:2015-10-23 11:01:24

标签: python multithreading python-2.7 pycharm python-multithreading

我编写基本的线程程序:

import threading 
  

初始化线程

class OpenThread (threading.Thread):
    def __init__(self, threadID):
        threading.Thread.__init__(self)
        self.threadID = threadID

    def run(self):
        print thread.threadID

for tID in range(0, 5):
    thread = OpenThread(tID)
    thread.start()

和尝试的最后5个输出在这里:

####try 1 
0
1
2
3
4

####try 2 
0
1
 2
3
4

####try 3 
0
2
23

4



####try 4 

0
1
2
3
 4

####try 5 

0
1
3
 34

我使用PyCharm作为IDE。 我不明白为什么有空格特征以及为什么更多的线程参数得到相同的值

1 个答案:

答案 0 :(得分:0)

请详细了解打印线程安全

问题是python使用单独的操作码进行NEWLINE打印和打印对象本身。最简单的解决方案可能是使用带有显式换行符的显式sys.stdout.write。或者使用锁定并重新打印"打印"!或者使用日志记录系统!

from __future__ import print_function
print = lambda x: sys.stdout.write("%s\n" % x)

import threading
import logging

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('thread-safe')

class OpenThread (threading.Thread):
    def __init__(self, threadID):
        threading.Thread.__init__(self)
        self.threadID = threadID

    def run(self):
        logger.debug(thread.threadID)

for tID in range(0, 5):
    thread = OpenThread(tID)
    thread.start()

在python3中打印是安全的。