后台任务

一、&

加在一个命令的最后,可以把这个命令放到后台执行,如

watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本

二、ctrl + z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

三、jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

四、fg

将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

五、bg

将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

六、kill

  • 法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
  • 法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

前台进程的终止:Ctrl+c

七、nohup

如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

ps -aux | grep "test.sh"  #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
### Python 中实现后台任务的方式 在 Python 中,可以通过多种方式来实现后台任务的异步处理。以下是两种常见的方法:`Celery` 和 `asyncio`。 #### 使用 Celery 实现后台任务 Celery 是一个强大的分布式任务队列工具,适用于需要执行复杂、长时间运行的任务场景。它可以与消息代理(如 RabbitMQ 或 Redis)配合工作,从而支持分布式的任务调度和执行。 以下是一个简单的 Celery 配置示例[^2]: ```python import os from celery import Celery # 创建 Celery 实例对象 app = Celery("djcelery") # 将 Celery 与 Django 结合,加载 Django 的配置文件 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryPros.settings.dev') # 加载配置 app.config_from_object("mycelery.config") # 自动发现并注册任务模块 app.autodiscover_tasks(["mycelery.sms"]) ``` 在这个例子中,Celery 被用来管理后台任务,并且可以轻松扩展到多个 worker 来提高并发能力。 #### 使用 asyncio 实现后台任务 对于不需要分布式架构的小型应用或者单机环境下的任务,`asyncio` 提供了一种轻量级的方式来实现异步编程。通过 `run_in_executor` 方法,可以将同步的耗时任务放到单独的线程池中运行,避免阻塞主线程中的事件循环[^1]。 下面是一个使用 `asyncio` 处理后台任务的例子: ```python import time import asyncio def blocking_io(): # 模拟一个耗时的操作 time.sleep(2) return "Blocking IO Completed" async def main(): loop = asyncio.get_event_loop() # 默认情况下,None 表示使用 ThreadPoolExecutor future = loop.run_in_executor(None, blocking_io) # 等待结果完成 result = await future print(result) asyncio.run(main()) ``` 这段代码展示了如何利用 `asyncio` 的 `run_in_executor` 功能,在不阻塞主事件循环的情况下执行耗时任务。 #### 对比 Celery 和 asyncio - **适用范围**: 如果应用程序涉及复杂的业务逻辑或需要跨多台服务器分发任务,则推荐使用 Celery;如果只是想在一个进程中高效地处理少量异步任务,那么可以选择 `asyncio`。 - **性能**: Celery 更适合大规模生产环境中长期运行的大批量任务,而 `asyncio` 则更适合于 I/O 密集型的应用程序以及较小规模的任务调度[^4]。 综上所述,无论是采用 Celery 还是 asyncio,都可以有效地解决 Python 应用中的后台任务需求问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值