2009-06-14 19 views
0

Ich habe noch nie zuvor in Python programmiert, also entschuldige meinen Code. Ich habe dieses Skript, das in einem Terminal laufen wird, aber ich kann es nicht erreichen, um Klientenseite zu laufen. Ich führe dies in Appcelerator Titanium Anwendung. Wie auch immer, ich habe eine Fehlerbehebung durchgeführt und es scheint, dass die Threads überhaupt nicht ausgeführt werden. Ist das eine Einschränkung? weiß jemand?Kann clientseitige Python-Threads verwenden?

<script type="text/python"> 
import os 
import sys 
import Queue 
import threading 
class FindThread (threading.Thread): 
    def run (self): 
     running = True 
     while running: 
     if jobPool.empty(): 
      #print '<< CLOSING THREAD' 
      running = False 
      continue 

     job = jobPool.get() 
     window.document.getElementById('output').innerHTML += os.path.join(top, name) 
     if job != None: 
      dirSearch(job)    

jobPool = Queue.Queue (0) 

def findPython(): 
    #output = window.document.getElementById('output') 
    window.document.getElementById('output').innerHTML += "Starting" 
    dirSearch("/") 
    # Start 10 threads: 
    for x in xrange (10): 
     #print '>> OPENING THREAD' 
     FindThread().start() 

def dirSearch(top = "."): 
    import os, stat, types 
    names = os.listdir(top) 
    for name in names: 
     try: 
      st = os.lstat(os.path.join(top, name)) 
     except os.error: 
      continue 
     if stat.S_ISDIR(st.st_mode): 
      jobPool.put(os.path.join(top, name)) 
     else: 
      window.document.getElementById('output').innerHTML += os.path.join(top, name) 

window.findPython = findPython 

</script> 

Antwort

2

Die Antwort, die derzeit (Freitag, 19. Juni 2009) ist ja, es Threads laufen kann, aber die nichts anderes als der Haupt-Thread JavaScript-Objekte zugreifen kann, schließt dies den DOM. Wenn Sie also planen, die Benutzeroberfläche mit einer Threading-App zu aktualisieren, ist dies nicht möglich ... YET. Bis das Appcelerator-Team eine Art Queue für den Haupt-Thread erstellt, möglich über ein Binding-System.

Bitte siehe Diskussion unter appcelerator forums.