Python同时运行两个命令

2024-04-27 22:10:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,在这段代码中遇到了问题:

while true:
   rand = random.choice(number)
   print(rand)             
   enter_word = input("Write something: ")
   time.sleep(5)

我希望能够在控制台中输入单词,同时在控制台中出现随机数。但是只有我输入一个单词,新的数字才会出现。使这两个命令同时运行的最佳方法是什么?

我需要做一个线程还是有更简单的事情我可以做? 如果我需要做一个线程,你能给我一点帮助,我将如何创建它吗?

提前谢谢


Tags: 代码truenumberinputrandom单词线程word
3条回答

这可以通过使用python中的多处理模块来实现,请参见下面的代码

#!/usr/bin/python
from multiprocessing import Process,Queue
import random
import time

def printrand():
   #Checks whether Queue is empty and runs
   while q.empty():
      rand = random.choice(range(1,100))
      time.sleep(1)
      print rand


if __name__ == "__main__":
   #Queue is a data structure used to communicate between process 
   q = Queue()
   #creating the process
   p = Process(target=printrand)
   #starting the process
   p.start()
   while True:
      ip = raw_input("Write something: ")
      #if user enters stop the while loop breaks
      if ip=="stop":
         #Populating the queue so that printramd can read and quit the loop
         q.put(ip)
         break
   #Block the calling thread until the process whose join() 
   #method is called terminates or until the optional timeout occurs.
   p.join()

要等待输入并同时显示一些随机输出,可以使用GUI(something with an event loop):

screenshot

#!/usr/bin/env python3
import random
from tkinter import E, END, N, S, scrolledtext, Tk, ttk, W

class App:
    password = "123456" # the most common password

    def __init__(self, master):
        self.master = master
        self.master.title('To stop, type: ' + self.password)

        # content frame (padding, etc)
        frame = ttk.Frame(master, padding="3 3 3 3")
        frame.grid(column=0, row=0, sticky=(N, W, E, S))
        # an area where random messages to appear
        self.textarea = scrolledtext.ScrolledText(frame)
        # an area where the password to be typed
        textfield = ttk.Entry(frame)
        # put one on top of the other
        self.textarea.grid(row=0)
        textfield.grid(row=1, sticky=(E, W))

        textfield.bind('<KeyRelease>', self.check_password)
        textfield.focus() # put cursor into the entry
        self.update_textarea()

    def update_textarea(self):
        # insert random Unicode codepoint in U+0000-U+FFFF range
        character = chr(random.choice(range(0xffff)))
        self.textarea.configure(state='normal') # enable insert
        self.textarea.insert(END, character)
        self.textarea.configure(state='disabled') # disable editing
        self.master.after(10, self.update_textarea) # in 10 milliseconds

    def check_password(self, event):
        if self.password in event.widget.get():
            self.master.destroy() # exit GUI

App(Tk()).master.mainloop()

I want to be able to input words in the console while, at the same time, have random numbers appear in the console.

#!/usr/bin/env python
import random

def print_random(n=10):
    print(random.randrange(n)) # print random number in the range(0, n)

stop = call_repeatedly(1, print_random) # print random number every second
while True:
   word = raw_input("Write something: ") # ask for input until "quit" 
   if word == "quit":
      stop() # stop printing random numbers
      break # quit 

其中^{} is define here

call_repeatedly()使用单独的线程重复调用print_random()函数。

相关问题 更多 >