Python如何修复由于睡眠功能而导致的Tkinter窗口崩溃
Posted
技术标签:
【中文标题】Python如何修复由于睡眠功能而导致的Tkinter窗口崩溃【英文标题】:Python How do i fix Tkinter window crashing due to sleep function 【发布时间】:2021-04-13 11:15:46 【问题描述】:由于在下面的代码中使用了“睡眠”功能,我的 Tkinter 窗口崩溃了。 后台程序运行良好,即使窗口很久以前就崩溃了。
如何使用 time.time 之类的函数来确保不会过于频繁地对 API 进行查询,而不是对 time.sleep 进行阻塞调用。 换句话说,一旦我关注了一个新用户列表,如何防止程序在接下来的 30 秒内发出另一个请求?
def follow_users(self,users_list):
api = self.api
api.login()
api.getSelfUsersFollowing()
result = api.LastJson
for user in result['users']:
following_users.append(user['pk'])
for user in users_list:
if not user['pk'] in following_users:
print('Following @' + user['username'])
api.follow(user['pk'])
# set this really long to avoid from suspension
sleep(30)
else:
print('Already following @' + user['username'])
sleep(15)
def unfollow_users(self):
api = self.api
api.login()
api.getSelfUserFollowers()
result = api.LastJson
for user in result['users']:
follower_users.append('pk':user['pk'], 'username':user['username'])
api.getSelfUsersFollowing()
result = api.LastJson
for user in result['users']:
following_users.append('pk':user['pk'],'username':user['username'])
for user in following_users:
if not user['pk'] in follower_users:
print('Unfollowing @' + user['username'])
api.unfollow(user['pk'])
sleep(20)
# set this really long to avoid from suspension
【问题讨论】:
这不是问题。 欢迎来到 Stack Overflow。请阅读How to Ask。 感谢您的编辑,但现在这是your previous question 的完全相同的副本。那不是我们要你做的。请提出一个清晰、重点突出、主题相关(参见help center)的问题。 具体来说,您所说的“解决代码中的“睡眠”功能以防止 Tkinter 窗口崩溃是什么意思?我怀疑我们是否需要所有这些代码。 minimal reproducible example 会好很多。 【参考方案1】:我会首先编写一个跟随单个用户的函数,仅此而已。它不需要循环遍历列表或睡眠或类似的东西,它应该只跟随那个用户。
例如:
def follow_user(self, user):
... code to follow this user ...
接下来,定义一个函数,将一个用户从列表中拉出,调用follow_user
函数,然后重新安排自己在超时后再次运行。
以下示例假设有一个名为root
的全局变量代表根窗口,但您可以使用任何您想要的小部件。它还假设该类在名为self.users
的实例变量中维护了一个要关注的用户列表。
def follow_users(self):
if self.users:
user = self.users.pop()
self.follow_user(user)
root.after(30000, self.follow_users)
然后,一旦你的程序启动,就只调用一次这个函数。它会每 30 秒调用一次自己。如果self.users
中至少有一个用户,它将从列表中拉出并关注该用户。 30 秒后它会再做一次,然后再做一次,以此类推。您可以随时更新self.users
,该用户最终会被关注。
【讨论】:
以上是关于Python如何修复由于睡眠功能而导致的Tkinter窗口崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“在 Qt 中将两个定时器变为一个函数,使用 qmutex 将 qeventloop 进行睡眠”
Spacy,在 python 中的大型数据集上使用 nlp.pipe,多处理导致进程进入睡眠状态。如何正确使用所有 CPU 内核?
VB API函数sleep在睡眠时,导致窗体不能移动,该如何解决?
如何在 Haskell 中查找和修复由于 GC 导致的性能问题?
如何使用 Calendar.current.startOfDay 修复由于 Core Data 中的时区导致的错误日期?