python threadingd多线程老是出错

#coding=utf-8importthreadingfromtimeimportctimedefmusic(m):print'在听%s,现在是%s'%(m,ctime... #coding=utf-8
import threading
from time import ctime
def music(m):
print '在听%s,现在是%s'%(m,ctime())

def movie(mo):
print '在看%s,现在是%s'%(mo,ctime())

threads=[]
t1=threading.Thread(target=music,args=(u'飒飒',))
threads.append(t1)

t2=threading.Thread(target=movie,args=(u'问问'))
threads.append(t2)

for t in threads:
t.setDaemon(True)
t.start()
展开
 我来答
匿名用户
推荐于2018-05-09
展开全部

把你的代码执行了一下,应该是有两个地方有问题。

1、入参(u'飒飒',)这个改成(u'飒飒'.encode("utf-8"),)

2、t2=threading.Thread(target=movie,args=(u'问问')),这个地方改成

      t2=threading.Thread(target=movie,args=(u'问问',))。不然会当成两个参数。


3、第三个不确定你的用途。就是t.setDaemon(True)那个地方。调用setDaemon的时候,子线程会随着主线程一起结束,不管子线程是否执行完成。所以有时候会出现执行完了啥输出都没有的情况。如果想让主线程等待子线程,在start后面使用t.join()。这样就会一直都有输出了。


修改完如下:

# coding=utf-8
import threading
from time import ctime

def music(m):
    print '在听%s,现在是%s' % (m, ctime())

def movie(mo):
    print '在看%s,现在是%s' % (mo, ctime())

threadList = []
t1 = threading.Thread(target=music, args=(u'飒飒'.encode("utf-8"),))
threadList.append(t1)

t2 = threading.Thread(target=movie, args=(u'问问'.encode("utf-8")))
threadList.append(t2)

for t in threadList:
    t.setDaemon(True)
    t.start()
    #t.join()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式