Python如何修复Tkinter窗口因睡眠功能而崩溃

2024-10-08 21:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

由于在下面的代码中使用了“sleep”函数,我的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

Tags: inselfapifortimeusernamesleepresult
1条回答
网友
1楼 · 发布于 2024-10-08 21:18:40

我将从编写一个函数开始,该函数只跟踪一个用户,仅此而已。它不需要在列表上循环,也不需要睡眠或者其他类似的东西,它应该只跟随一个用户

例如:

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,最终用户会被跟踪

相关问题 更多 >

    热门问题