<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create_devices(self, thing_names, config_file, region=None, cert_dir=None, append=False, account_id=None, policy_name='ggd-discovery-policy', profile_name=None):
 """ Using the `thing_names` values, creates Things in AWS IoT, attaches and downloads new keys & certs to the certificate directory, then records the created information in the local config file for inclusion in the Greengrass Group as Greengrass Devices. :param thing_names: the thing name or list of thing names to create and use as Greengrass Devices :param config_file: config file used to track the Greengrass Devices in the group :param region: the region in which to create the new devices. [default: us-west-2] :param cert_dir: the directory in which to store the thing's keys and certs. If `None` then use the current directory. :param append: append the created devices to the list of devices in the config file. [default: False] :param account_id: the account ID in which to create devices. If 'None' the config_file will be checked for an `account_id` value in the `misc` section. :param policy_name: the name of the policy to associate with the device. [default: 'ggd-discovery-policy'] :param profile_name: the name of the `awscli` profile to use. [default: None] """

        logging.info("create_devices thing_names:{0}".format(thing_names))
        config = GroupConfigFile(config_file=config_file)
        if append is False and config.is_device_fresh() is False:
            raise ValueError(
                "Config file tracking previously created devices. Append "
                "devices instead"
            )

        if region is None:
            region = self._region
        if account_id is None:
            account_id = self._account_id
        devices = dict()
        if append:
            devices = config['devices']
        if type(thing_names) is str:
            thing_names = [thing_names]

        iot_client = _get_iot_session(region=region, profile_name=profile_name)
        for thing_name in thing_names:
            keys_cert, thing = self.create_thing(thing_name, region, cert_dir)
            cert_arn = keys_cert['certificateArn']
            devices[thing_name] = {
                'thing_arn': thing['thingArn'],
                'cert_arn': cert_arn,
                'cert_id': keys_cert['certificateId'],
                'thing_name': thing_name
            }
            logging.info("Thing:'{0}' associated with cert:'{1}'".format(
                thing_name, cert_arn))
            device_policy = self.get_device_policy(
                device_name=thing_name, account_id=account_id, region=region
            )
            self._create_attach_thing_policy(cert_arn, device_policy,
                                             iot_client, policy_name)

        config['devices'] = devices
        logging.info("create_devices cfg:{0}".format(config))