時光筆墨 发表于 2020-7-31 11:54:20

python多线程一个线程输出input,一个线程计时怎么做?

本帖最后由 時光筆墨 于 2020-7-31 12:56 编辑

给用户5秒时间输入,如果不输入就用默认值,一个线程输出input,一个线程计时,代码上怎么实现?

xiaosi4081 发表于 2020-7-31 16:16:32

本帖最后由 xiaosi4081 于 2020-8-1 20:28 编辑

暴力解法:{:10_256:}

import threading,time

def test():
    global a
    a = input("a=")

try:
    func = threading.Thread(target=test)
    func.start()
    time.sleep(5)
    if not a:
      raise KeyboardInterrupt
except KeyboardInterrupt:
    a = 5
    pass

print(a)

時光筆墨 发表于 2020-8-1 21:20:50

xiaosi4081 发表于 2020-7-31 16:16
暴力解法:

不行啊- -

時光筆墨 发表于 2020-8-1 21:24:20

来个大佬,帮忙看看怎么写啊- -

Twilight6 发表于 2020-8-2 20:38:46

時光筆墨 发表于 2020-8-1 21:24
来个大佬,帮忙看看怎么写啊- -


感觉应该没办法,因为 input 函数没办法将他自动终止输入,也可能是我技术不够吧,尽量写了个类似的:

from threading import Thread
from time import sleep,perf_counter


def func():
    global user
    def a():
      global user
      user = input('>>>')
    t = Thread(target=a)
    t.setDaemon(True)
    t.start()

    while True:
      sleep(0.5)
      if user != None:
            return user
      if perf_counter() >= 5:
            user = 100
            return user

user = None
func()
print(user)

陈尚涵 发表于 2020-8-3 18:17:10

Twilight6 发表于 2020-8-2 20:38
感觉应该没办法,因为 input 函数没办法将他自动终止输入,也可能是我技术不够吧,尽量写了个类似的:
...

其实暴力解法应该是可以的,只不过没安装库

xiaosi4081 发表于 2020-8-4 14:55:07

時光筆墨 发表于 2020-8-1 21:20
不行啊- -

哪报错?

陈尚涵 发表于 2020-8-5 13:58:10

xiaosi4081 发表于 2020-8-4 14:55
哪报错?

支持!

Cool_Breeze 发表于 2020-8-5 15:23:10

本帖最后由 Cool_Breeze 于 2020-8-5 15:30 编辑

#coding=utf-8

from multiprocessing import Process,Queue
import time
import os, sys

q = Queue()
sec = 5
choose = 0

def input_wiat(q, fn):
    sys.stdin = os.fdopen(fn)
    while True:
      try:
            time.sleep(1)
            n = int(input('默请在5秒内输入一个整数\n默认为0\n请输入:'))
            q.put(n)
            break
      except ValueError:
            continue

if __name__ == '__main__':
    fn = sys.stdin.fileno()
    p = Process(target=input_wiat, args=(q, fn))
    p.start()
    while sec:
      if not q.empty():
            choose = q.get()
            break
      time.sleep(1)
      sec -= 1
    p.terminate()
    print('choose = {}'.format(choose))

Cool_Breeze 发表于 2020-8-6 11:31:32

这里

陈尚涵 发表于 2020-8-7 20:01:55

Cool_Breeze 发表于 2020-8-6 11:31
这里

你答的也有道理啊{:9_219:}

Cool_Breeze 发表于 2020-8-7 20:34:57

陈尚涵 发表于 2020-8-7 20:01
你答的也有道理啊

{:9_218:}
页: [1]
查看完整版本: python多线程一个线程输出input,一个线程计时怎么做?