Pythonで、名前付きパイプを4つ用意し、4つ同時に待機させ、一つでも書き込みが行われたら、ディスコードに通知を飛ばすプログラムを作成したいです。
普通にコードを書くと、名前付きパイプを4つ用意してしまうと、4つすべてにデータが書き込まれないと、処理が行われずやりたいことができませんでした。
そこで、スレッドを使って、並列処理を行おうと思い、添付のコードを書きました。
これで、3つまでは同時待機させることができ、意図する処理を行うことができたのですが、
4つ目が動作しなくなりました。
スレッドは、同時に処理できる数に制限があるのでしょうか?
また、そんな場合、どういう処理をすれば、制限なく、複数のパイプを個別で待機させることができるのでしょうか?
処理委成功すれば、15個くらい同時待機させたいと考えています。
Python
1コード 2 3from discordwebhook import Discord 4import win32pipe 5import win32file 6import threading 7 8discord = Discord(url="URL") 9 10def test1(): 11 test1_text = win32pipe.CreateNamedPipe( 12 r'\\.\pipe\test1_symbol', 13 win32pipe.PIPE_ACCESS_DUPLEX, 14 win32pipe. PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT, 15 1, 256, 256, 0, None) 16 17 win32pipe.ConnectNamedPipe(test1_text, None) 18 19 buffer1 = b'' 20 21 while True: 22 hr, c_test1 = win32file.ReadFile(test1_text, 1) 23 buffer1 += c_test1 24 25 if c_test1 == b'\n': 26 27 discord.post(content='{}'.format(str(buffer1))) 28 buffer1 = b'' 29 30def test2(): 31 test2_text = win32pipe.CreateNamedPipe( 32 r'\\.\pipe\test2_symbol', 33 win32pipe.PIPE_ACCESS_DUPLEX, 34 win32pipe. PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT, 35 1, 256, 256, 0, None) 36 37 win32pipe.ConnectNamedPipe(test2_text, None) 38 39 buffer2 = b'' 40 41 while True: 42 hr, c_test2 = win32file.ReadFile(test2_text, 1) 43 buffer2 += c_test2 44 45 if c_test2 == b'\n': 46 47 discord.post(content='{}'.format(str(buffer2))) 48 buffer2 = b'' 49 50def test3(): 51 test3_text = win32pipe.CreateNamedPipe( 52 r'\\.\pipe\test3_symbol', 53 win32pipe.PIPE_ACCESS_DUPLEX, 54 win32pipe. PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT, 55 1, 256, 256, 0, None) 56 57 win32pipe.ConnectNamedPipe(test3_text, None) 58 59 buffer3 = b'' 60 61 while True: 62 hr, c_test3 = win32file.ReadFile(test3_text, 1) 63 buffer3 += c_test3 64 65 if c_test3 == b'\n': 66 67 discord.post(content='{}'.format(str(buffer3))) 68 buffer3 = b'' 69 70def test4(): 71 test4_text = win32pipe.CreateNamedPipe( 72 r'\\.\pipe\test4_symbol', 73 win32pipe.PIPE_ACCESS_DUPLEX, 74 win32pipe. PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT, 75 1, 256, 256, 0, None) 76 77 win32pipe.ConnectNamedPipe(test4_text, None) 78 79 buffer4 = b'' 80 81 while True: 82 hr, c_test4 = win32file.ReadFile(test4_text, 1) 83 buffer4 += c_test4 84 85 if c_test4 == b'\n': 86 87 discord.post(content='{}'.format(str(buffer4))) 88 buffer4 = b'' 89 90t1 = threading.Thread(target=test1) 91t2 = threading.Thread(target=test2) 92t3 = threading.Thread(target=test3) 93t4 = threading.Thread(target=test4) 94 95t1.start() 96 97t2.start() 98 99t3.start() 100 101t4.start() 102
お詳しい方、ご教授お願いいたします。
回答1件
あなたの回答
tips
プレビュー