找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5094|回复: 7

[求助] start()进程没反应是怎么回事啊

3

主题

16

帖子

16

积分

贫民

积分
16
gc318 发表于 2017-7-21 15:46:06 | 显示全部楼层 |阅读模式
请问start()进程没反应是怎么回事啊
import multiprocessing
import time

def worker(interval):
    n = 3
    while n > 0:
        print("1111".format(time.ctime()))
        time.sleep(interval)
        n -= 1

if __name__ == "__main__":
    p1 = multiprocessing.Process(target = worker, args = (3,))
    p1.start()
    print "4444444444"


就输出了4444444444 但应该还有P1进程里的3行字符串的
回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-7-21 16:39:44 | 显示全部楼层
start后面加一句p1.join()
回复 支持 反对

使用道具 举报

3

主题

16

帖子

16

积分

贫民

积分
16
gc318  楼主| 发表于 2017-7-21 17:44:50 来自手机 | 显示全部楼层
uitb 发表于 2017-7-21 16:39
start后面加一句p1.join()

加join也不行,加了就卡在那里10来秒,然后再打印'4444444',卡着的时间刚好是p进程的时间
回复 支持 反对

使用道具 举报

1

主题

28

帖子

28

积分

贫民

积分
28
cdbclx 发表于 2017-7-21 20:20:38 | 显示全部楼层
windows 下面 子线程里的标准输出并没有输出到主线程的标准输出里,好像linux是可以的,具体要怎那么样才能输出到主线程的标准输出里,没有研究过,有大侠知道可以分享一下
你可以在子线程里 write一个文件,就知道了,其实子线程是执行的
但是必须要加 join 才行。
回复 支持 反对

使用道具 举报

3

主题

16

帖子

16

积分

贫民

积分
16
gc318  楼主| 发表于 2017-7-21 20:36:37 | 显示全部楼层
cdbclx 发表于 2017-7-21 20:20
windows 下面 子线程里的标准输出并没有输出到主线程的标准输出里,好像linux是可以的,具体要怎那么样才能 ...

是的,是执行了,但是要子进程执行完毕才能运行 print "4444444444"这个主进程。就是这个比较坑啊
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-7-22 12:47:51 | 显示全部楼层
gc318 发表于 2017-7-21 20:36
是的,是执行了,但是要子进程执行完毕才能运行 print "4444444444"这个主进程。就是这个比较坑啊 ...

哦,我记起来这个问题了,我也遇到过,多进程时子进程中的print内容不会打印出来,估计是Python自带的那个shell的bug吧,用cmd执行Python就没有这个毛病了
回复 支持 反对

使用道具 举报

1

主题

28

帖子

28

积分

贫民

积分
28
cdbclx 发表于 2017-7-22 13:10:30 | 显示全部楼层
gc318 发表于 2017-7-21 20:36
是的,是执行了,但是要子进程执行完毕才能运行 print "4444444444"这个主进程。就是这个比较坑啊 ...

这个是应该的啊,主线程的存在即是为了执行子线程或者是和子线程进行交互,一点执行了那个 print "44",主线程退出了,子线程也就退出了啊
能不能让子线程作为守护,这个没研究过,大侠们可以解释一下??
回复 支持 反对

使用道具 举报

3

主题

16

帖子

16

积分

贫民

积分
16
gc318  楼主| 发表于 2017-7-26 10:42:46 | 显示全部楼层
放弃进程了 网上也没有解决的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表