0

我正在尝试自动化数据库转储,它就像在脚本中一样工作

sched = Scheduler()

@sched.cron_schedule(day_of_week='mon-fri', hour=13)
def dump():
    '''Dumps database with predefined data'''
    user = 'root'
    password = 'root'
    host = 'localhost'
    database = 'root_db'


    filestamp = time.strftime('%Y-%m-%d-%I:%M')
    os.popen("mysqldump -u %s -p%s -h %s -e --opt -c %s | gzip -c > %s.gz" % (user, password, host, database, database + "_" + filestamp))

    print "\n-- please have a the dump file in " + database + "_" + filestamp + ".gz --"


if __name__ == "__main__":
    sched.start()
    while True:
        pass

此外,我在计算机上有 4 个没有超线程的内核,并且我已经部署了 4 个 Tornado 实例。我的问题是,如果我启动上面的脚本,它会占用一个处理器吗?

4

1 回答 1

0

对于脚本中的代码执行的时间量,是的,它确实需要一个核心。

不过,您应该注意几件事。该脚本似乎在周一至周五每 13 小时启动一个mysqldump程序。因此,调度程序脚本本身只会执行一小段时间。之后,mysqldump程序将一直运行,并且在执行时,它将占用一个核心。

该脚本或mysqldump程序在其运行的整个期间不会占用 CPU。当它们空闲或执行 IO 或其他等待操作时,CPU 将被带离这些。通常,操作系统调度程序将在系统上所有活动的进程之间共享内核(根据调度算法,当它们需要时)。

另外,代码片段:

while True:
    pass

它似乎会旋转。那肯定会烧CPU。也许这就是您所看到并真正询问的内容。你不想要那个。我会用睡眠或其他一些等待操作来代替它(除非 python 足够聪明,可以将其优化为自己的等待操作)。

while True:
    time.sleep(1000)
于 2013-09-18T00:30:30.853 回答