二、多进程的重复使用 在实现Redis key 的读写采集过程中,在数据采集中用到多进程提高效率,在得到结果往 pika 中存储 key 时,为提高效率,想采用多进程,但测试发现多进程嵌套使用多进程,会出现如下问题 : Queue objects should only be shared between processes through inheritance后来考虑到往pika中存数据属于io密集型的操作,因此,采用了多线程,解决了这一问题。这里涉及到多线程如何使主进程等待多个子线程执行完毕,解决方式如下:
t_objs = []
for i in range(100):
t = threading.Thread(target=self.batch_send_pika,args=(set_key, redis_port, all_batch_message[i]))
t.start()
t_objs.append(t)
for t in t_objs:
t.join() #等待线程的执行结果
from multiprocessing import Queue,Manager
q_list = []
for i in range(len(rule_list)):
q_name = "q" + str(i)
manager = Manager()
q_name = manager.Queue()
q_list.append(q_name)
然后将q_list作为参数进行传递即可
四、crontab报错在使用计划任务时未修改成功,遇到如下报错crontab: installing new crontabcrontab: error while writing new crontab to /var/spool/cron/tmp.XXXXa2LhEOcrontab: edits left in /tmp/crontab.rEpgqL解决方式如下:查看磁盘空间和inode节点是否用尽
这里发现/var 目录磁盘空间已经用尽将/var 下无用的文件进行删除,解决了这一问题