两个队列的添加和删除方法必须同步。一瞬间只有一个线程可以访问它方法。如果一个线程正在访问关键区域(生产者或消费者),其余线程将等待轮到它们。在
第一个生产者将开始工作,最初,消费者处于睡眠阶段。
为什么?同步运行整个系统。
你将如何得到它?睡眠生产者线程处理后,如果消费者睡眠在工作开始。
第一个生产者或消费者将获得队列中的锁,处理工作并释放它。在此期间,如果任何线程(生产者或消费者)来获取数据,它们将等待轮到它们(使用线程池的概念)。
一旦在共享驱动器上(通过任何进程)复制了任何文档,目录监视程序(Producer)代码就会获取该文档的路径并同步存储在executionQueue中。
现在消费者将来取数据,FirstThread首先唤醒并从executionQueue获取数据。FirstThread将获取锁定执行队列,然后获取数据并释放其中的锁。如果第二个线程在中间来取数据,它将等待轮到他。
从executionQueue获取数据后,FirstThread将从位置获取文档,并使用获取的文档调用Python脚本。
在中间,SecondThread将获取锁并获取路径,并开始处理与FirstThread相同的概念。
几秒钟后,FirstThread将完成他的工作,然后它将进入executionQueue,再次获取锁并获取文件路径并释放锁,并开始处理相同的工作,对SecondThread也同样如此。。。
在处理该文件的过程中,如果发生任何错误,则将该路径信息发送到errorQueue方法,并在日结束时或系统空闲时使用相同的概念或手动分析errorQueue信息。
如果executionQueue中没有可用的数据,那么此时生产者线程(目录观察程序)已经处于休眠阶段。然后消费者线程会来到executionQueue来获取数据,他们不会得到任何数据,然后进入休眠阶段,比如1分钟,1分钟后它会再次唤醒并去获取数据等等。。。
在每个步骤日志中,这些信息将帮助您更好地进行分析。
利用这个概念,你可以并行运行整个系统。