Java'da, olayları dinleyecek ve daha sonra bunları Jython'da işleyecek bir çerçeve yapıyorum. Farklı senaryolara farklı etkinlik türleri gönderilecektir. jython PythonInterpreter.exec() çağrıldığında komut dosyası derlemek için oldukça uzun bir süre gerektiğindenJava'dan çok satırlı jython komut dosyaları nasıl çalışır?
, ben komut önceden derlemek zorunda kalacaktır. Ben o şu şekilde yapıyorum:
olayları Şimdi benim bilmece içinPythonInterpreter pi = new PythonInterpreter();
pi.set("variable_1", "value_1");
pi.set("variable_x", "value_x");
pi.exec(compiled);
geldikçe PyCode derlenmiş nesne havuzuna itti ve kullanılacak
// initialize the script as string (would load it from file in final version)
String script = "print 'foo'";
// get the compiled code object
PyCode compiled = org.python.core.__builtin__.compile(script, "<>", "exec");
- birden çok olduğunu gerçekleşebilir Aynı anda gerçekleşen belirli türdeki olaylar - böylece, aynı anda çalışan çok sayıda betik örneği.
Hemen hemen tüm komut muhtemelen kısa ömürlü kalacağını - 100 hatları, hiçbir döngüler kadar. Sayı ve sıklık tamamen rastgele (kullanıcı tarafından oluşturulan olaylar) ve olay türü başına saniyede 0'dan 200'e kadar olabilir.
Bunu yapmanın en iyi yolu ne olurdu? Birkaç alternatif bakıyorum: tetikleyici olay noktada
- kullanım senkronizasyonu - Bu aynı komut birden çok örneğini önleyeceğini hem de olaylar bunlar
- havuzu oluşturmak olmalıdır olduğunca çabuk işleme tabi tutulmaz bir şekilde orijinal PyCode nesne klonlama tarafından doldurulan aynı tip komut - lag kaldırılır bu şekilde - en büyük problem, muhtemelen exec() bitirdiğinde havuz
- dinamik gerektiğinde ebeveynden komut nesnesi klonlamak ve sonra atın boyutları optimize olacaktır derlemeden ancak hala klonlama yönteminde mevcut olan
Muhtemelen 2 ve 3 numaralı sayıların kombinasyonu en iyi dinamik havuz boyutları olabilir mi?
Peki, herhangi bir düşünce? ;)
Güzel! Bir çekicilik gibi çalışır;) İlk Module.compile (...) çağrılmadan önce bir PythonInterpreter örneğinin oluşturulmasının ZORUNLUDUR. Değilse, NullPointerException SyspathJavaLoader'dan atılır.loadClass() En çok yardımcı oldunuz. Şimdi tek yapmam gereken bunu dinamik olarak yeniden boyutlandırılabilir bir betik havuzuna entegre etmektir ... – nEJC
Jython 2.5 için herhangi bir eşdeğer var mı? – Laurent
@Laurent - Hayır, bu alana baktığımdan beri bu alana bakmadım – McDowell