Rozbroje & multiprocessing deadman prepínač python

0

Otázka

snažil som sa, aby to logiku, takže keď som dostal správu o konflikt, ktorý obsahuje "911" ničí skript alebo hovory, niektoré funkcie a zastaviť časovač im čelí veľa chýb a ja si nemyslím, že ochridskej rámcovej dohody správny spôsob, ako to urobiť ...

akákoľvek pomoc ?

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

Najlepšiu odpoveď

1

Keď si nastaviť premennú v rámci funkcie, to bude predvolená na miestnej pôsobnosti. Pozrite sa na tento príklad:

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

Skúste si to online!

To bude výstup 1.

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

Skúste si to online!

Bude to vlastne chyba, pretože od nastavíte a = 2 vo funkcii f, a stáva lokálnej premennej, takže print(a) chyby, pretože to nie je definovaným v tomto bode.

Obísť to, dať global a na vrchole svojej funkcie. Vo vašom prípade, robiť global sign vo vnútri def on_message tak ako:

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

Práve teraz, keď sign = manager.bool(True) je nastavená, to nie je ovplyvňuje globálnu premennú sign ktoré Timer je čítania.

Tiež si myslím, že je potrebné pridať @client.event nad async def on_message ako dobre.

2021-11-23 23:20:31

vďaka to funguje tak dobre :)
Joseph Yosoevsky

V iných jazykoch

Táto stránka je v iných jazykoch

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