Discord&multiprocessing deadman เปลี่ยนเป็นภาษาไพธอน

0

คำถาม

ฉันพยายามจะทำให้มันง่ายตรรกะถ้าฉันได้รับข้อความบน discord นั่นมีคำว่า"911"มันทำลายในสคริปต์หรือเรียกฟังก์ชันบางอย่างและหยุดจับเวลา ข้อความด่วนทันใจกลับต้องเผชิญหน้ากับสิ่งมากมายเกิดข้อผิดพลาดและฉันไม่คิดว่า ofa ที่เหมาะสมที่จะทำมัน...

ช่วยไหม

from time import sleep
import discord
import multiprocessing

client = discord.Client()
manager = multiprocessing.Manager()
sign = manager.boolean(False)

def Timer(sign):
    for second in range(15):
        if sign == True:
            print("bloooock")
            break
        if sign == False:
            print("passsssss")
            sleep(1)
def discord_message(client, sign):
    @client.event
    async def on_ready():
        print('Logged on as', client)
    async def on_message(message):
        messageContent = message.content
        if len(messageContent) > 0:
            if messageContent == str("911"):
                sign = manager.bool(True)
    client.run('###')
if __name__ == '__main__':
    freeze_support()
    p1 = multiprocessing.Process(target=Timer, args=(sign,))
    p2 = multiprocessing.Process(target=discord_message, args=(client, sign,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
discord discord.py python python-3.x
2021-11-23 22:45:54
1

คำตอบที่ดีที่สุด

1

เมื่อคุณตั้งค่าตัวแปรภายในฟังก์ชันมันจะค่าปริยายในท้องถิ่นลำก้องปืน มองดูตัวอย่าง:

a = 1
def f(): a = 2
f()
print(a)

ลองมันออนไลน์!

เรื่องนี้จะพิมพ์ออก 1.

a = 1
def f(): print(a); a = 2
f()
print(a)

ลองมันออนไลน์!

นี่จะเป็นจริงเกิดข้อผิดพลาดเพราะตั้งแต่คุณตั้งค่า a = 2 ฟังก์ชันภายใน f, a จะกลายเป็นตัวแปรภายในแล้ว print(a) เกิดข้อผิดพลาดเพราะมันไม่ได้กำหนดไว้ในความเข้าใจเรื่องนั้นหรอก

เพื่อจะจัดการเรื่องนี้ให้ global a อยู่ทางด้านบนของคุณฟังก์ชัน. ในกรณีของคุณทำ global sign ข้างใน def on_message เหมือนแล้ว:

def discord_message(client, sign):
    ...
    async def on_message(message):
        global sign
        ...

ตอนนี้ตอนที่ sign = manager.bool(True) ถูกตั้งไว้,มันไม่ส่งผลกระทบต่อคนโกลบอลตัวแปร sign ซึ่ง Timer คืออ่านอยู่

แล้วก็ฉันคิดว่าคุณต้องเพิ่ม @client.event อยู่เหนือ async def on_message เช่นกัน

2021-11-23 23:20:31

ขอบคุณมันทำงานดังนั้นเอ่อ:)
Joseph Yosoevsky

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่