2017-05-05 17 views
2

我使用Praw,一個API包裝器來製作一個reddit機器人。我正在監控和回覆評論和帖子。 Praw有新的評論和新帖子的「流」,所以我不必處理像確保我不回覆同一帖子兩次的東西。這是通過for submission in subreddit.stream.submissions():for comment in subreddit.stream.comments():完成的。這兩個都會無休止地循環,就像創建兩個while(true)循環一樣。同時監視兩個流的最佳方式是什麼?如果我應該使用線程,那麼這兩個線程是否能夠訪問相同的變量?如果我永遠同時運行兩個或多個函數,他們是否訪問相同的內存?

對於好奇:這是我的代碼。 https://github.com/kenblu24/procss-bot

回答

1

通常情況下,線程能夠訪問整個進程的內存。這是一種在編程語言中一致的功能。

儘管Python中的多線程由於GIL而受到嚴重限制。

如果您可以容忍稍微不好的代碼,您可以嘗試在提交中處理一個元素,其中一個來自評論等,依次在while True循環中處理。

+0

我可以創建一個指揮線程來暫停線程並防止內存訪問問題嗎? – Kevin

+1

您應該使用與另一種編程語言相同的模式,因此讓導體線程看起來像是過度殺傷。你在Python中確實擁有諸如鎖和其他同步機制之類的東西,並且必須注意不要發生死鎖或損壞狀態。這只是一次一個線程可以容納GIL,並且可以完成Python的工作。如果您擁有多個核心,那麼這意味着即使其他線程可以在這些核心上進行調度,它們也不會執行。在C#/ Java/C++中,你不會遇到這個問題,並且可能有多個真正並行的執行線程。 –

相關問題