使用Web服务器运行脚本并维护数据以备后用

用户名

注意:我想在不使用任何框架的情况下实现这一点。

我必须使用python创建一个Web应用程序。应用程序应在过去60秒内保持每个进程的CPU使用率的运行平均值。它应该充当Web服务器,并且在收到请求时,应该返回每个进程的当前平均值。以下是我编写的脚本。record_usage.py是我想在server.py运行时立即运行的脚本这样它将运行并维护cpu使用情况数据,我打算在收到XHR请求并将其发送回客户端时读取该数据。

因此,我的问题是如何调用此要求?我试图运行record_usage.py使用subprocess.POPEN启动服务器后。record_usage.py也开始在后台运行。但是,当我尝试访问由它创建的数据时,我创建的类对象不是它使用的对象,而是一个新的对象。如何完成此链接?

请问我不清楚的事情。

server.py中的最新更改

if __name__ == '__main__':
    RU_OBJ = RU(settings.SAMPLING_FREQ, settings.AVG_INTERVAL)
    RU_LOCK = RLock()
    # Record CPU usage in a thread.
    ru_thread = Thread(target=RU_OBJ.record, args=(RU_LOCK,))
    ru_thread.daemon = True
    ru_thread.start()

    # Run server.
    run()

record_usage.py中的最新更改

def record(self, lock):
    while True:
        with lock:
            self.add_processes()
        time.sleep(self.sampling_freq)

这是应用锁的正确方法吗?在读取过程信息时,将应用类似的锁定。能行吗?

添加了功能:

def add_processes(self,):
    for _process in psutil.process_iter():
        try:
            new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid',
                                               'status'])
        except psutil.NoSuchProcess:
            continue
        pid, (user, _sys) = new_proc['pid'], new_proc.pop('cpu_times')
        # Get or create details object for the process.
        existing = self.processes.setdefault(pid, new_proc)
        # Get or create queue object for the CPU times of the process.
        queue_dict = self.process_queue.setdefault(pid, dict())
        # User CPU time.
        user_q = queue_dict.setdefault('user_q', PekableQueue(self.avg_interval))
        user_q.enqueue(user)
        user_avg = get_avg(user_q)
        # System CPU time.
        sys_q = queue_dict.setdefault('sys_q', PekableQueue(self.avg_interval))
        sys_q.enqueue(_sys)
        sys_avg = get_avg(sys_q)
        # Update the details object for the process.
        existing.update(user_avg=user_avg, sys_avg=sys_avg, **new_proc)

def get_curr_processes(self):
    return [self.processes[pid] for pid in psutil.get_pid_list()
            if pid in self.processes]
杰夫斯

要在另一个线程中收集统计信息:

if __name__ == '__main__':
    from threading import Thread, Lock
    import record_usage

    lock = Lock()
    t = Thread(target=record_usage.record, args=[lock])
    t.daemon = True
    t.start()

    run(lock)

如果您在一个线程中更改了一些共享数据并在另一个线程中进行了读取,则可以使用锁保护访问/更改值的位置:

#...
with self.lock:
    existing = self.processes.setdefault(pid, new_proc)
#...
with self.lock:
    existing.update(user_avg=user_avg, sys_avg=sys_avg, **new_proc)
#...

def get_curr_processes(self):
    with self.lock:
        return [self.processes[pid] for pid in psutil.get_pid_list()
                if pid in self.processes]

self.lock所有线程中的同一对象至关重要如果self.processes为a,dict则无需在CPython中使用锁。这些方法是用C实现的,并且解释器在调用它们时不会释放GIL(全局锁),即,一次只能访问一个线程dict

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

直接使用服务器cron运行脚本/插件?

来自分类Dev

从Django Web服务器在远程服务器上运行脚本

来自分类Dev

使用pickle和tkinter保存数据以备后用

来自分类Dev

捕获信用卡信息以备后用而不将其传输到Web服务器?

来自分类Dev

保留结构数据以备后用

来自分类Dev

在我的Web服务器上,如何在图形环境中运行脚本?

来自分类Dev

发出运行脚本以比较不同服务器上的表之间的数据的问题

来自分类Dev

节点服务器启动后运行脚本

来自分类Dev

如何针对 Windows 服务器 WinRM 运行脚本

来自分类Dev

使Capistrano在运行脚本时在服务器上使用别名

来自分类Dev

使Capistrano在运行脚本时在服务器上使用别名

来自分类Dev

如何使用apache从Web服务器运行bash脚本?

来自分类Dev

Minecraft 服务器执行脚本

来自分类Dev

如果我的服务器有多个IP地址,如何使用每个IP地址运行脚本?

来自分类Dev

如何使服务器每次都检查站点?如何在服务器上运行脚本?

来自分类Dev

从远程服务器从phpstorm中的键盘快捷方式运行脚本

来自分类Dev

SSH连接后在服务器中自动运行脚本

来自分类Dev

当有人远程登录我的服务器时运行脚本

来自分类Dev

我是否必须在Apache服务器上安装Ruby才能运行脚本

来自分类Dev

代理程序构建完成后,在TeamCity服务器上运行脚本

来自分类Dev

运行脚本以发送游戏Terraria服务器命令

来自分类Dev

SSH连接后在服务器中自动运行脚本

来自分类Dev

高频率在另一台服务器上运行脚本

来自分类Dev

如何在多个实例中运行脚本?(Ubuntu服务器)

来自分类Dev

我是否必须在Apache服务器上安装Ruby才能运行脚本

来自分类Dev

无法在启动ec2 ubuntu服务器上运行脚本

来自分类Dev

从我的计算机在主机服务器中运行脚本并关闭计算机

来自分类Dev

在Tornado Web服务器中运行Python脚本

来自分类Dev

启动时通过脚本运行Web服务器

Related 相关文章

  1. 1

    直接使用服务器cron运行脚本/插件?

  2. 2

    从Django Web服务器在远程服务器上运行脚本

  3. 3

    使用pickle和tkinter保存数据以备后用

  4. 4

    捕获信用卡信息以备后用而不将其传输到Web服务器?

  5. 5

    保留结构数据以备后用

  6. 6

    在我的Web服务器上,如何在图形环境中运行脚本?

  7. 7

    发出运行脚本以比较不同服务器上的表之间的数据的问题

  8. 8

    节点服务器启动后运行脚本

  9. 9

    如何针对 Windows 服务器 WinRM 运行脚本

  10. 10

    使Capistrano在运行脚本时在服务器上使用别名

  11. 11

    使Capistrano在运行脚本时在服务器上使用别名

  12. 12

    如何使用apache从Web服务器运行bash脚本?

  13. 13

    Minecraft 服务器执行脚本

  14. 14

    如果我的服务器有多个IP地址,如何使用每个IP地址运行脚本?

  15. 15

    如何使服务器每次都检查站点?如何在服务器上运行脚本?

  16. 16

    从远程服务器从phpstorm中的键盘快捷方式运行脚本

  17. 17

    SSH连接后在服务器中自动运行脚本

  18. 18

    当有人远程登录我的服务器时运行脚本

  19. 19

    我是否必须在Apache服务器上安装Ruby才能运行脚本

  20. 20

    代理程序构建完成后,在TeamCity服务器上运行脚本

  21. 21

    运行脚本以发送游戏Terraria服务器命令

  22. 22

    SSH连接后在服务器中自动运行脚本

  23. 23

    高频率在另一台服务器上运行脚本

  24. 24

    如何在多个实例中运行脚本?(Ubuntu服务器)

  25. 25

    我是否必须在Apache服务器上安装Ruby才能运行脚本

  26. 26

    无法在启动ec2 ubuntu服务器上运行脚本

  27. 27

    从我的计算机在主机服务器中运行脚本并关闭计算机

  28. 28

    在Tornado Web服务器中运行Python脚本

  29. 29

    启动时通过脚本运行Web服务器

热门标签

归档