如果我在C#線程中啓動IronPyThon引擎,python腳本將啓動一些線程。但是,當我殺死C#線程時,python腳本中的所有線程仍在運行。我怎樣才能殺死Python腳本中的所有線程?停止在IronPython中運行的所有線程
4
A
回答
5
簡單的理念將開始它作爲一個Process
,
你殺Process
它的每一個Thread
也將被殺死之後。
+2
+1:不知道IronPython解釋器在被強制取出時究竟做了什麼或者不做什麼,這很可能是最穩健的方式。也許在單獨的應用程序域中運行它也可能是足夠的,但很難說。 –
0
如果你確定要殺死它們,你所做的就是遍歷進程列表並檢查每個進程的父ID。如果父ID與您啓動的IronPython進程的ID相同,則將其殺死。這將殺死與該進程相關的所有線程。像這樣的事情,其中的過程是過程和家長的全陣列是你開始IronPython的過程:
private static void killProcessAndChildProcesses(Process[] processes, Process parent)
{
foreach (Process p in processes)
{
if (p.GetParentProcessId() == parent.Id)
{
p.Kill();
}
}
parent.Kill()
}
如果你擔心孩子IP處理自己的產卵過程中,您將需要轉換這成了一個遞歸的解決方案。
0
如果你的線程循環在每次迭代執行的東西,你可以設置一個揮發性布爾標誌(因爲我不熟悉Python僞代碼),使得它在完成當前迭代後退出:
while shouldExit = false // do stuff
然後,只要將該標誌設置爲true,當您希望線程停止時,它將在下次檢查條件時停止。 如果您不能等待迭代完成並需要立即停止迭代,則可以使用Thread.Abort,但要確保無法保留打開的文件句柄,套接字,鎖或其他任何類似的內容不一致的狀態。
0
你可以肯定地以相反的方式做到這一點。由於我不知道Python,我只會分享這個想法。
- 設置系統(使用的是Windows,它在C#很簡單,搜索
Mutex
) - 份額名爲事件與蟒蛇主線程
- 在主命名事件的名稱蟒蛇線程設置一個終止標誌,訪問由工人蟒蛇線程
- 組工作的Python線程來監視這個標誌occasionaly
- 在主線程蟒也開始像下面
- 設置無限循環在C#線程指定的事件,只要你想讓他們死
僞代碼:
while (Not(isNamedEventSet) && otherThreadsStillBusy)
{
// Do some magic to check the status of the event
isNamedEventSet = ...
// rest for a while,
// there is nothing better than a nap while other threads do all the hard work
Sleep(100)
}
我已經做了類似的場景C#/ C++和它一直在所有情況下成功至今。我希望它適合蟒蛇雖然..
相關問題
- 1. 停止所有正在運行的線程在活動中運行
- 2. 如何停止當前線程以外的所有正在運行的線程?
- 3. Java線程/運行停止
- 4. 停止正在運行的線程
- 5. 不停止gdb中的所有線程
- 6. 在運行時暫停當前進程中的所有線程
- 7. python停止線程正在運行
- 8. 如何停止在C#中線程內安全運行的所有C#任務
- 9. 如何在Silverlight中終止所有正在運行的線程?
- 10. C#在多線程上運行IronPython
- 11. Android的線程不會停止運行
- 12. Java的運行和停止線程
- 13. 停止並用新線程替換正在運行的線程
- 14. 如何確保在主線程停止之前所有線程都已停止?
- 15. PyQt的:app.exec_()停止所有運行
- 16. 線程已經停止運行
- 17. 運行時DLL停止主線程
- 18. Java線程突然停止運行
- 19. 如何停止可運行線程
- 20. 斷點是否停止所有線程?
- 21. 停止運行所有計時器
- 22. 運行多個線程,並停止一旦一個已停止
- 23. 停止JUnit整理,直到所有其他線程都停止
- 24. 如何在自己的線程中運行並正確停止?
- 25. OSGi的線程從未停止運行,定義線程
- 26. C#多線程,循環停止所有進度的線程
- 27. 如何停止Parallel.ForEach的所有執行線程?
- 28. 在創建soundloop之前停止/暫停所有線程
- 29. GC是否停止.NET中的所有應用程序線程?
- 30. 停止應用程序中的所有線程
請顯示您的代碼 - 你如何啓動引擎,你如何試圖殺死它 – MikroDel
你真的想殺死**所有**線程?然後就退出這個過程;) – quetzalcoatl
你如何「殺死」線程?通常不建議使用'Thread.Kill'方法。搜索SO的原因(例如[這裏](http://stackoverflow.com/q/5034538/21567))。 –