如何为线程创建字符串变量并使用标志删除它们

正如我在标题中所说,我想创建string variables使用. 并使用删除它们。Threadsinputflag

我需要一步步解释这个问题。

  1. 比方说,我input从用户那里得到。这input由用户将是 的名称Thread variable

  2. input等于lovelike。在这种情况下,将创建 2 个线程变量和线程。他们的名字将是loveand like

  3. 要创建一个Thread,必须给出这样的代码。

代码:

from threading import Thread

import time

import re


# Using while loop. Because I want to create multiple Threads by doing this.


# Dicts

dicts = {}

flags = {}


while True:


    # Input

    threadName = input('Thread name please? ')


    # To delete a Thread

    if 'delete' in threadName:

        delThread = re.search(r'delete (.*)', threadName)

        if delThread:

            delThread = list(map(str, delThread.groups()))

            delThread = ''.join(delThread)

            print('DELETING:', delThread)

            flags[delThread] = True

            print('DICT NOW:', flags)

    else:

        # Target function for every Thread. Print a message every 3 secs.

        def targetfunc(tname):

            while True:

                if flags[tname] in flags and flags[tname] == True:

                    break

                print(f"I'm {tname} Thread.")

                time.sleep(3)


        # Create Threads. 'dicts[threadName]' will be whatever the user enters input.

        # Should be string variable.

        # 'threadName' is equal to input too.

 

        dicts[threadName] = Thread(target = targetfunc, args = [threadName])

        dicts[threadName].start()

        flags[threadName] = False

        print(dicts)

        print(flags)

我正在使用 2 个字典。一个dicts用于创建Threads,另一个用于使用删除它们flag。

要创建,只需键入您要调用的线程即可。

要删除,请键入delete (thread name)。

KeyError当我尝试删除时,此代码会为每个线程抛出。这是完整的错误。

这就是程序。如何解决这个问题?


我想要实现的是:


当我键入名称时,该名称必须创建一个Thread具有该名称的新名称。但是当我输入时delete (thread name)应该停止(thread name) Thread。


我希望我能解释清楚。希望你帮忙。


繁星点点滴滴
浏览 116回答 1
1回答

繁星coding

问题是您正在检查字典条目而不是检查该键是否存在。更改此行:if flags[tname] in flags and flags[tname] == True:对此:if tname in flags and flags[tname] == True:通过此更改,代码可以正确运行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python