Fabric: Eksekusi paralel di bawah python3

Dibuat pada 2 Des 2018  ·  14Komentar  ·  Sumber: fabric/fabric

Saya tidak dapat menemukan dokumen apa pun tentang eksekusi paralel untuk versi fabric yang lebih baru. Apakah sama dengan versi python 2, atau sedang dalam proses?

Terima kasih!

Komentar yang paling membantu

@akiuni apakah ada PR untuk ini? #1912 (komentar)

Halo, saya rasa tidak.. Sejujurnya, saya tahu cara memeriksanya dan saya tidak tahu bagaimana cara mengirimkan modifikasi seperti itu...

Semua 14 komentar

Ya, bagaimanapun, grup Threading tidak mendukung konfigurasi, khususnya:

config = Config(overrides={'sudo':{'password': 'changeme'}})

c = ThreadingGroup("[email protected]", "[email protected]", connect_kwargs={"password": "changeme"}, config=config)

c.run("whoami")

c.sudo("whoami") #Throws AttributeError: 'ThreadingGroup' object has no attribute 'sudo'

ThreadingGroup hanya mengizinkan menjalankan perintah.
https://github.com/fabric/fabric/issues/1899#issue -377714688

Anda dapat menulis ulang dan menambahkan dukungan perintah.

Apa pendapat Anda tentang tambalan berikut untuk mengaktifkan sudo di SerialGroup dan ThreadingGroup?
( diterapkan dan diuji pada kain 2.4 )

--- fabric-orig/group.py    2018-10-30 14:35:22.000000000 +0100
+++ fabric-patched/group.py 2019-02-18 10:16:29.186000000 +0100
@@ -183,12 +183,28 @@
             raise GroupException(results)
         return results

+    def sudo(self, *args, **kwargs):
+        results = GroupResult()
+        excepted = False
+        for cxn in self:
+            try:
+                results[cxn] = cxn.sudo(*args, **kwargs)
+            except Exception as e:
+                results[cxn] = e
+                excepted = True
+        if excepted:
+            raise GroupException(results)
+        return results

 def thread_worker(cxn, queue, args, kwargs):
     result = cxn.run(*args, **kwargs)
     # TODO: namedtuple or attrs object?
     queue.put((cxn, result))

+def thread_worker_sudo(cxn, queue, args, kwargs):
+    result = cxn.sudo(*args, **kwargs)
+    # TODO: namedtuple or attrs object?
+    queue.put((cxn, result))

 class ThreadingGroup(Group):
     """
@@ -208,6 +224,49 @@
             )
             threads.append(thread)
         for thread in threads:
+            thread.start()
+        for thread in threads:
+            # TODO: configurable join timeout
+            # TODO: (in sudo's version) configurability around interactive
+            # prompting resulting in an exception instead, as in v1
+            thread.join()
+        # Get non-exception results from queue
+        while not queue.empty():
+            # TODO: io-sleep? shouldn't matter if all threads are now joined
+            cxn, result = queue.get(block=False)
+            # TODO: outstanding musings about how exactly aggregate results
+            # ought to ideally operate...heterogenous obj like this, multiple
+            # objs, ??
+            results[cxn] = result
+        # Get exceptions from the threads themselves.
+        # TODO: in a non-thread setup, this would differ, e.g.:
+        # - a queue if using multiprocessing
+        # - some other state-passing mechanism if using e.g. coroutines
+        # - ???
+        excepted = False
+        for thread in threads:
+            wrapper = thread.exception()
+            if wrapper is not None:
+                # Outer kwargs is Thread instantiation kwargs, inner is kwargs
+                # passed to thread target/body.
+                cxn = wrapper.kwargs["kwargs"]["cxn"]
+                results[cxn] = wrapper.value
+                excepted = True
+        if excepted:
+            raise GroupException(results)
+        return results
+
+    def sudo(self, *args, **kwargs):
+        results = GroupResult()
+        queue = Queue()
+        threads = []
+        for cxn in self:
+            my_kwargs = dict(cxn=cxn, queue=queue, args=args, kwargs=kwargs)
+            thread = ExceptionHandlingThread(
+                target=thread_worker_sudo, kwargs=my_kwargs
+            )
+            threads.append(thread)
+        for thread in threads:
             thread.start()
         for thread in threads:
             # TODO: configurable join timeout

Sejujurnya itu akan luar biasa @akiuni

Akan lebih baik untuk mendapatkan fitur execute() kembali ke ThreadingGroup untuk Fabric2.

@akiuni apakah ada PR untuk ini? https://github.com/fabric/fabric/issues/1912#issuecomment -464652728

@akiuni apakah ada PR untuk ini? #1912 (komentar)

Halo, saya rasa tidak.. Sejujurnya, saya tahu cara memeriksanya dan saya tidak tahu bagaimana cara mengirimkan modifikasi seperti itu...

Kita perlu menggabungkan ini ke Fabric secepatnya.

mm melihat kode saat ini di v 2.5.0
https://github.com/fabric/fabric/blob/2.5.0/fabric/group.py#L127 Saya dapat melihat bahwa kode ini tidak lagi terkini, dan penulis sedang memikirkan cara terbaik untuk mengimplementasikannya. Juga tanpa PR, mereka tidak memiliki platform untuk membahas perubahan yang diperkenalkan kode. Saya sedang melihat ini, tetapi saya bukan pembuat kode python ahli, tetapi saya akan mencoba mencobanya sebagai PR

Halo, saya tidak terbiasa dengan git developpemen (PR adalah kata yang aneh bagi saya), jangan ragu untuk memberi tahu saya jika saya dapat membantu

hai @akiuni
PR adalah singkatan dari Pull Request, dan artinya, jika Anda ingin membuat perubahan, Anda memasukkan perubahan itu ke dalam kode sumber melalui pull request, yang kemudian dapat diperlakukan sebagai percakapan, dan ditinjau, hingga disetujui. Ketika telah disetujui, perubahan yang diperkenalkan PR dapat ditelusuri kembali ke komit seperti yang telah saya lakukan di sini: #2052
Trik cerdas adalah menambahkan ".patch" ke permintaan tarik (PR) seperti di sini: https://patch-diff.githubusercontent.com/raw/fabric/fabric/pull/2052.patch yang kemudian akan memberi Anda perbedaan dari perubahan (seperti yang telah Anda berikan dalam komentar Anda sebelumnya) tetapi sekarang, manfaatnya adalah, percakapan / ulasan / satu titik perubahan seperti yang saya sebutkan di atas - terima kasih telah menjadi yang pertama dengan tambalan untuk ini, saya sedang mencari itu saat saya membuat PR

Sudo sedang ditambahkan ke Grup sekarang! Lihat #1999

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Grazfather picture Grazfather  ·  4Komentar

neemxyang picture neemxyang  ·  6Komentar

omzev picture omzev  ·  6Komentar

bitprophet picture bitprophet  ·  4Komentar

jmcgrath207 picture jmcgrath207  ·  5Komentar