日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

子进程无法从标准输入读取数据

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 子进程无法从标准输入读取数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

每個process對象最多只能調用一次start()方法,join([timeout])方法會阻塞調用process對象的進程,直到timeout時間超時,或者process進程退出。如果timeout設置為None,則無超時時間。對于linux操作系統的進程管理,父進程會等待子進程退出,并收回子進程的資源,然后父進程再退出。如果父進程先于子進程退出,則子進程會被init進程接管。如果父進程沒有退出也沒有回收子進程資源,則子進程會一直停留在僵死狀態。這里join方法就是阻塞父進程,等待子進程執行完畢。

如果在子進程里面要接受標準輸入(如調用raw_input函數),這時候會有問題。因為標準輸入是被父進程占用,因此這里子進程無法從標準輸入讀取數據。

一個解決辦法是將標準輸入描述符,傳入子進程函數:

from multiprocessing import Process

import sys, os

import time


def intask(x, fileno):

? ? sys.stdin = os.fdopen(fileno)

? ? while True:

? ? ? ? in_char = raw_input("Enter to continue, Q to quit: ")

? ? ? ? if in_char.upper() == 'Q':

? ? ? ? ? ? break

? ? ? ? print x * x


if __name__ == '__main__':

? ? fn = sys.stdin.fileno()

? ? arg = 5

? ? p = Process(target = intask, args = (arg, fn))

? ? p.start()

? ? p.join()


轉載于:https://blog.51cto.com/smileyouth/1903461

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的子进程无法从标准输入读取数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。