from senpy.plugins import AnalysisPlugin

import multiprocessing


class AsyncPlugin(AnalysisPlugin):
    def _train(self, process_number):
        return process_number

    def _do_async(self, num_processes):
        with multiprocessing.Pool(processes=num_processes) as pool:
            values = pool.map(self._train, range(num_processes))
        return values

    def activate(self):
        self.value = self._do_async(4)

    def analyse_entry(self, entry, params):
        values = self._do_async(2)
        entry.async_values = values
        yield entry

from senpy.plugins import AnalysisPlugin

import multiprocessing


def _train(process_number):
    return process_number


class AsyncPlugin(AnalysisPlugin):
    def _do_async(self, num_processes):
        pool = multiprocessing.Pool(processes=num_processes)
        values = pool.map(_train, range(num_processes))

        return values

    def activate(self):
        self.value = self._do_async(4)

    def analyse_entry(self, entry, params):
        values = self._do_async(2)
        entry.async_values = values
        yield entry

Fix multiprocessing tests in python2.7
Fix multiprocessing tests in python2.7

Closes #28 for python 2.

Apparently, process pools are not contexts in python 2.7.
On the other hand, in py2 you cannot pickle instance methods, so
you have to implement Pool tasks as independent functions.

  from senpy.plugins import AnalysisPlugin
  
  import multiprocessing
  
  
+ def _train(process_number):
+     return process_number
+ 
+ 
  class AsyncPlugin(AnalysisPlugin):
-     def _train(self, process_number):
-         return process_number
+     def _do_async(self, num_processes):
+         pool = multiprocessing.Pool(processes=num_processes)
+         values = pool.map(_train, range(num_processes))
  
-     def _do_async(self, num_processes):
-         with multiprocessing.Pool(processes=num_processes) as pool:
-             values = pool.map(self._train, range(num_processes))
          return values
  
      def activate(self):
          self.value = self._do_async(4)
  
      def analyse_entry(self, entry, params):
          values = self._do_async(2)
          entry.async_values = values
          yield entry
  
Fix multiprocessing tests in python2.7
## Code Before:
from senpy.plugins import AnalysisPlugin

import multiprocessing


class AsyncPlugin(AnalysisPlugin):
    def _train(self, process_number):
        return process_number

    def _do_async(self, num_processes):
        with multiprocessing.Pool(processes=num_processes) as pool:
            values = pool.map(self._train, range(num_processes))
        return values

    def activate(self):
        self.value = self._do_async(4)

    def analyse_entry(self, entry, params):
        values = self._do_async(2)
        entry.async_values = values
        yield entry

## Instruction:
Fix multiprocessing tests in python2.7
## Code After:
from senpy.plugins import AnalysisPlugin

import multiprocessing


def _train(process_number):
    return process_number


class AsyncPlugin(AnalysisPlugin):
    def _do_async(self, num_processes):
        pool = multiprocessing.Pool(processes=num_processes)
        values = pool.map(_train, range(num_processes))

        return values

    def activate(self):
        self.value = self._do_async(4)

    def analyse_entry(self, entry, params):
        values = self._do_async(2)
        entry.async_values = values
        yield entry
